1085 Stimmen

Wie erhält man einen Funktionsnamen als String?

Wie erhalte ich in Python einen Funktionsnamen als String, ohne die Funktion aufzurufen?

def my_function():
    pass

print get_function_name_as_string(my_function) # my_function is not in quotes

sollte ausgeben "my_function" .

Gibt es eine solche Funktion in Python? Wenn nicht, gibt es Ideen, wie man sie implementieren kann? get_function_name_as_string in Python?

16voto

NL23codes Punkte 962

Ich habe ein paar Antworten gesehen, die Dekoratoren verwendet haben, obwohl ich das Gefühl hatte, dass ein paar davon ein bisschen langatmig waren. Hier ist etwas, das ich für die Protokollierung von Funktionsnamen sowie ihrer jeweiligen Eingabe- und Ausgabewerte verwende. Ich habe es hier angepasst, um nur die Informationen zu drucken, anstatt eine Protokolldatei zu erstellen, und es an das spezifische Beispiel der OP angepasst.

def debug(func=None):
    def wrapper(*args, **kwargs):
        try:
            function_name = func.__func__.__qualname__
        except:
            function_name = func.__qualname__
        return func(*args, **kwargs, function_name=function_name)
    return wrapper

@debug
def my_function(**kwargs):
    print(kwargs)

my_function()

Ausgabe:

{'function_name': 'my_function'}

11voto

Szczerski Punkte 489
import inspect

def my_first_function():
    func_name = inspect.stack()[0][3]
    print(func_name)  # my_first_function

oder:

import sys

def my_second_function():
    func_name = sys._getframe().f_code.co_name
    print(func_name)  # my_second_function

10voto

Gustin Punkte 101

Sie können den Namen einer Funktion als Zeichenkette erhalten, indem Sie die spezielle __name__ variabel.

def my_function():
    pass

print(my_function.__name__) # prints "my_function"

5voto

Ahmed Shehab Punkte 1209

Versuchen Sie

import sys
fn_name = sys._getframe().f_code.co_name

weiterer Hinweis https://www.oreilly.com/library/view/python-cookbook/0596001673/ch14s08.html

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X