HOWTO · Python
Funktionsname in Python abrufen
Es wird demonstriert, wie man einen Funktionsnamen in Python ausgibt
Auf dieser Seite
Um den Namen einer Funktion abzurufen, lesen Sie ihr Attribut __name__, ohne die Funktion aufzurufen: function.__name__ gibt eine Zeichenkette zurück. Verwenden Sie __qualname__, wenn der lexikalische Kontext relevant ist, und untersuchen Sie einen Frame nur, wenn Sie Informationen über die gerade ausgeführte Funktion benötigen.
Den Namen einer Funktion mit __name__ abrufen
Ein Funktionsobjekt stellt seinen Kurzname über __name__ bereit. Dieses Beispiel definiert zwei Funktionen und gibt ihre Namen aus; aufgerufen wird keine der beiden Funktionen.
def greet():
return "Hello"
def farewell():
return "Goodbye"
print(greet.__name__)
print(farewell.__name__)
greet
farewell
Das Attribut funktioniert auch mit eingebauten und importierten Funktionen. Beispielsweise ist print.__name__ gleich print, während os.system.__name__ gleich system ist:
import os
print(print.__name__)
print(os.system.__name__)
print
system
Diese Ausdrücke untersuchen die Funktionsobjekte; sie rufen keine der beiden Funktionen auf. Das ist nützlich, wenn Sie eine Funktion an einen anderen Teil eines Programms übergeben oder ihre Identität anzeigen möchten.
Einen qualifizierten Namen mit __qualname__ abrufen
__qualname__ enthält den lexikalischen Pfad der Funktion innerhalb ihres umgebenden Gültigkeitsbereichs. So lassen sich Methoden oder verschachtelte Funktionen unterscheiden, die denselben kurzen __name__ haben.
class Report:
def render(self):
return "ready"
print(Report.render.__name__)
print(Report.render.__qualname__)
render
Report.render
Bei dieser Methode lautet der Kurzname render und der qualifizierte Name Report.render. Keines der beiden Attribute ist ein eindeutiger Bezeichner: Zwei Funktionen in verschiedenen Modulen können denselben qualifizierten Namen haben, und wenn Sie einer Funktion eine andere Variable zuweisen, ändert sich ihr deklarierter Name nicht.
Verwenden Sie __name__ für eine knappe Anzeige oder Suche anhand des deklarierten Funktionsnamens. Verwenden Sie __qualname__, wenn die umgebende Klasse oder ein verschachtelter Gültigkeitsbereich verdeutlicht, welche Funktion gemeint ist. Beides sind Attribute des Funktionsobjekts; die Funktion wird daher ohne Klammern referenziert.
Den aktuellen Aufruf-Frame untersuchen
Wenn der Code ausdrücklich den Namen der gerade ausgeführten Funktion benötigt, kann Pythons Modul inspect den aktuellen Frame und co_name aus dessen Codeobjekt bereitstellen. Diese Form der Introspektion eignet sich für Debugging und ähnliche Werkzeuge; sie ist nicht der übliche Weg, den Namen eines Funktionsobjekts abzurufen.
import inspect
def current_function_name():
frame = inspect.currentframe()
if frame is None:
return None
return frame.f_code.co_name
print(current_function_name())
current_function_name
inspect.currentframe() kann bei Python-Implementierungen, die das Abrufen von Frames nicht unterstützen, None zurückgeben. Frame-Objekte können außerdem Referenzen auf lokale Variablen festhalten. Geben Sie Frame-Referenzen daher frei, wenn Sie sie über eine kurze Untersuchung hinaus behalten. sys._getframe(0).f_code.co_name ist, sofern verfügbar, eine Alternative auf niedrigerer Ebene. Da ihr Name mit einem Unterstrich beginnt, sollten Sie sie als implementierungsspezifische Schnittstelle und nicht als portable API zum Abrufen von Namen behandeln.
Den passenden Ansatz wählen
- Verwenden Sie
function.__name__, um den Kurznamen eines bekannten Funktionsobjekts abzurufen. - Verwenden Sie
function.__qualname__, wenn ein verschachtelter Gültigkeitsbereich oder der Klassenkontext Teil des angezeigten Namens sein soll. - Verwenden Sie
inspect.currentframe()odersys._getframe()nur, wenn Sie Informationen über den gerade ausgeführten Frame benötigen, etwa beim Debugging.
Für die gewöhnliche Anzeige eines Funktionsnamens ist __name__ die direkte Lösung. Die Beispiele wurden erfolgreich ausgeführt; ihre Ausgaben zeigen die von den jeweiligen Ausdrücken zurückgegebenen Namen.