Aquí tengo 2 juegos de código.
def outer(msg): def inner(msg): return inner() outer("hi")
El otro es
def outer(msg): def inner(msg): return inner outer("hi")
¿Cuál es la diferencia entre estos dos conjuntos?
Una función se llama con el paréntesis y devuelve un valor. Devolver una función sin llamarla (sin paréntesis) devolverá el puntero a la función en sí, en lugar del valor de la función. Estás pasando la función para que pueda ser llamada en otro lugar.
Los paréntesis son la syntax para llamar a una función. No es estrictamente un operador, pero podría considerarlo así:
inner() # Call the function
Las funciones tienen valores de retorno (el valor predeterminado es None
), por lo que
return inner()
Llama a la función inner
y devuelve cualquier retorno inner
.
El nombre inner
es solo una referencia a un objeto.
x = 42
El nombre x
es una referencia a un int
.
def inner(): pass
El nombre inner
es una referencia a una función. x = inner
seguido de x()
es perfectamente válido.
Entonces, devolver un nombre, cualquier nombre, es solo devolver una referencia al objeto al que se refiere, sea lo que sea. Una función, un entero, un elefante, lo que sea.