HOWTO · Python
Funktionsaufruf aus String-Name in Python
Es wird demonstriert, wie man eine Funktion aus einer Zeichenkette in Python aufruft
Auf dieser Seite
In diesem Tutorial wird gezeigt, wie man in Python eine Funktion über ihren Namen im String-Format aufruft.
Der Anwendungsfall für dieses Problem ist, eine Funktion aus einem Modul oder einer Klasse in eine Variable für eine beliebige Verwendung zuzuweisen.
Verwenden Sie getattr(), um eine Funktion in eine Variable in Python zuzuweisen
Die Funktion getattr() gibt den Wert eines Attributs aus einem Objekt oder Modul zurück. Diese Funktion hat zwei erforderliche Argumente, das erste Argument ist der Name des Objekts oder Moduls und das zweite ist ein String-Wert, der den Namen des Attributs enthält.
Das betreffende Attribut kann in Form einer Variablen, einer Funktion oder einer Unterklasse vorliegen.
Nehmen wir an, wir haben eine Klasse namens “User” mit den angegebenen Attributen:
# Filename: user.py
class User:
name = "John"
age = 33
def doSomething():
print(name + " did something.")
Nun wollen wir die Funktion des Attributs doSomething() in einer Methode speichern und diese aufrufen. Dazu verwenden wir die Funktion getattr().
from user import User as user
doSomething = getattr(user, "doSomething")
doSomething(user)
Ausgabe:
John did something.
Nun wird die Funktion user.doSomething() in die Variable doSomething verpackt. Auf diese Weise muss das Objekt user nicht angegeben werden, um die Funktion aufzurufen.
Verwendung von locals() und globals() zum Aufrufen einer Funktion aus einer Zeichenkette in Python
Eine weitere Möglichkeit, eine Funktion aus einer Zeichenkette aufzurufen, ist die Verwendung der eingebauten Funktionen locals() und globals. Diese beiden Funktionen geben ein Python-Dictionary zurück, das die aktuelle Symboltabelle des angegebenen Quellcodes darstellt.
Der Unterschied zwischen den beiden Funktionen ist der Namensraum. Wie die Namen andeuten, gibt locals() ein Dictionary mit lokalen Variablen und globals() ein Dictionary mit lokalen Variablen zurück. Die Funktionsnamen werden ebenfalls im Format der Zeichenkette zurückgegeben.
Lassen Sie uns diese Methoden in einem Beispiel anwenden. Deklarieren Sie 2 Zufallsfunktionen und rufen Sie diese mit den beiden eingebauten Funktionen auf.
def myFunc():
print("This is a function.")
def myFunc2():
print("This is another function.")
locals()["myFunc"]()
globals()["myFunc2"]()
Ausgabe:
This is a function.
This is another function.
Zusammenfassend lässt sich sagen, dass zum Aufrufen einer Funktion aus einer Zeichenkette die Funktionen getattr(), locals() und globals() verwendet werden. Für getattr() müssen Sie wissen, in welchem Objekt oder Modul sich die Funktion befindet, während locals() und globals() die Funktion in ihrem eigenen Bereich lokalisieren.