Как получить название функции, которая выполняется в текущий момент в python?
Как можно получить название функции, которая начала выполняться в коде python внутри самой функции, при этом заранее не написав и не выведя название внутри этой же функции.
Пример:
def tester(*args, **kwargs):
# тут какой-то код должен вывести названии этой функции
Плохой пример:
def tester(*args, **kwargs):
print('Сейчас работает функция tester')
Почему я не могу передавать название функции внутри самой функции, для её вывода? - Я могу много раз изменять названия своих функций, соответственно и названия внутри функций мне столько же раз придется изменять.
Ответы (1 шт):
Автор решения: asanisimov
→ Ссылка
Можно написать декоратор и применять к функциям которые Вы хотитe логировать (выводить можно не только имя но и аргументы). Пример:
from functools import wraps
def func_name_logger(f):
@wraps(f)
def decorator(*args, **kwargs):
print(f.__name__)
return f(*args, **kwargs)
return decorator
@func_name_logger
def any_functions():
print('start work.')
any_functions() # output: any_functions
# start work.
Еще один вариант, модуль inspect. Пример:
import inspect
LAST_FUNC = None
def foo():
global LAST_FUNC
frame = inspect.currentframe()
LAST_FUNC = inspect.getframeinfo(frame).function
foo()
print(LAST_FUNC) # foo