HOWTO · Python
Chiamare una funzione dal nome della stringa in Python
Dimostra come chiamare una funzione da una stringa in Python
In questa pagina
Questo tutorial introdurrà come chiamare una funzione usando il suo nome in formato stringa in Python.
Il caso d’uso per questo problema è assegnare una funzione da un modulo o una classe in una variabile per qualsiasi uso possa avere.
Usa getattr() per assegnare una funzione a una variabile in Python
La funzione getattr() restituisce un valore di un attributo da un oggetto o modulo. Questa funzione ha due argomenti obbligatori, il primo argomento è il nome dell’oggetto o del modulo e il secondo è un valore stringa che contiene il nome dell’attributo.
L’attributo in questione può essere nella forma di una variabile, una funzione o una sottoclasse.
Supponiamo di avere una classe denominata User con gli attributi dati:
# Filename: user.py
class User:
name = "John"
age = 33
def doSomething():
print(name + " did something.")
Ora, vogliamo memorizzare la funzione attributo doSomething() in un metodo e chiamarla. Per fare questo, useremo la funzione getattr().
from user import User as user
doSomething = getattr(user, "doSomething")
doSomething(user)
Produzione:
John did something.
Ora, la funzione user.doSomething() è racchiusa nella variabile doSomething. In questo modo, l’oggetto user non deve essere specificato per chiamare la funzione.
Usa locals() e globals() per chiamare una funzione da una stringa in Python
Un altro modo per chiamare una funzione da una stringa è usare le funzioni incorporate locals() e globals. Queste due funzioni restituiscono un dizionario Python che rappresenta la tabella dei simboli corrente del codice sorgente dato.
La differenza tra le due funzioni è lo spazio dei nomi. Come indicano i nomi, locals() restituisce un dizionario che include variabili locali e globals() restituisce un dizionario che include variabili locali. Anche i nomi delle funzioni vengono restituiti nel formato della stringa.
Mettiamo questi metodi in un esempio. Dichiara 2 funzioni casuali e chiamale utilizzando entrambe le funzioni integrate.
def myFunc():
print("This is a function.")
def myFunc2():
print("This is another function.")
locals()["myFunc"]()
globals()["myFunc2"]()
Produzione:
This is a function.
This is another function.
In sintesi, per chiamare una funzione da una stringa, vengono utilizzate le funzioni getattr(), locals() e globals(). getattr() richiederà di sapere in quale oggetto o modulo si trova la funzione, mentre locals() e globals() individueranno la funzione all’interno del proprio ambito.