В качестве расширения @Demyn's answer, я создал некоторые вспомогательные функции, которые печатают имя текущей функции и аргументы в текущей функции по:
import inspect
import logging
import traceback
def get_function_name():
return traceback.extract_stack(None, 2)[0][2]
def get_function_parameters_and_values():
frame = inspect.currentframe().f_back
args, _, _, values = inspect.getargvalues(frame)
return ([(i, values[i]) for i in args])
def my_func(a, b, c=None):
logging.info('Running ' + get_function_name() + '(' + str(get_function_parameters_and_values()) +')')
pass
logger = logging.getLogger()
handler = logging.StreamHandler()
formatter = logging.Formatter(
'%(asctime)s [%(levelname)s] -> %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.INFO)
my_func(1, 3) # 2016-03-25 17:16:06,927 [INFO] -> Running my_func([('a', 1), ('b', 3), ('c', None)])
http: // stackoverflow.com/questions/245304/how-do-i-get-the-name-of-a-function-or-method-from-in-a-python-function - или – 2008-11-01 15:31:16
В следующий раз укажите свою мотивацию в вопросе. В его нынешнем виде это, по-видимому, смущает людей, и некоторые из них склонны предполагать, что вы будете называть дословно `get_function_name_as_string (my_function)` и ожидаете `` my_function "` как результат. Я предполагаю, что ваша мотивация - это общий код, который работает с функцией как объект первого класса и должен получить имя функции, переданной в качестве аргумента. – 2016-02-12 15:24:48
Мотивация, стоящая за вопросом, НЕ СООТВЕТСТВУЕТ техническому ответу. Прекратите использовать его в качестве предлога, чтобы издеваться, критиковать, интеллектуально осанки и избегать ответов. – CogitoErgoCogitoSum 2017-08-27 19:04:24