Chiamare una funzione dal nome della stringa in Python

Rayven Esplanada 21 dicembre 2022
  1. Usa getattr() per assegnare una funzione a una variabile in Python
  2. Usa locals() e globals() per chiamare una funzione da una stringa in Python
Chiamare una funzione dal nome della stringa in Python

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.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

Articolo correlato - Python Function

Articolo correlato - Python String