In python, una variabile può contenere qualsiasi cosa; che include (ma non limitato a) un numero, una stringa, un oggetto di classe o .. una funzione.
Come probabilmente già saprai, l'uso di (cioè le cose che puoi fare con ) una variabile Python dipende da qualsiasi cosa esso contenga.
Ad esempio, probabilmente hai visto che una variabile contenente una stringa può essere utilizzata con la manipolazione delle stringhe, proprio come si eseguirebbero le stesse operazioni direttamente su una stringa non elaborata.
Che cosa puoi fare con una variabile contenente una funzione? Risposta: esattamente la stessa cosa che puoi fare con una funzione direttamente ...
(... Ma ricorda che quando si copia una funzione in una variabile, quella funzione viene identificata solo dal suo nome, senza parentesi, perché la parentesi chiamerà la funzione e otterrà il suo valore di ritorno).
Come si assegna una funzione a una variabile? Risposta: esattamente nello stesso modo in cui assegni qualsiasi altro tipo di variabile:
def say_hello():
print "Hello"
meow = say_hello # Note: no parenthesis.
meow() # Call the say_hello function, indirectly via 'meow'
Come immagazzini una variabile di funzione in una classe? Risposta: esattamente nello stesso modo in cui memorizzi qualsiasi altro tipo di variabile in una classe:
def say_hello():
print "Hello"
class Foo:
def __init__(self, callback):
self.callback = callback # just another variable...
def do_it():
self.callback() # "calling" the variable with parenthesis
# because it's expected to be a function.
meow = Foo(say_hello)
meow.do_it()
Cerca di non pensarci troppo o di rimanere bloccato dal fatto che la variabile contiene una funzione piuttosto che un altro tipo di dati / oggetto. Una variabile è una variabile indipendentemente da cosa si trovi.
Infine, come probabilmente già saprai, una funzione viene chiamata usando le parentesi con argomenti. vale a dire say_hello("hello")
.
Se esiste una funzione in una variabile, la funzione può essere richiamata usando la sintassi della funzione con la variabile. vale a dire my_little_callback()
.