Как получить имя функции в виде строки в Python?

Это работает для меня под Linux:

mongo < script.js
623
задан Filipp W. 5 December 2018 в 07:13
поделиться

3 ответа

my_function.__name__

Используя __name__ предпочтительный метод, поскольку он применяется однородно. В отличие от этого func_name, это работает над встроенными функциями также:

>>> import time
>>> time.time.func_name
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
AttributeError: 'builtin_function_or_method' object has no attribute 'func_name'
>>> time.time.__name__ 
'time'

Также двойные подчеркивания указывают читателю, это - специальный атрибут. В качестве награды классы и модули имеют __name__ атрибут также, таким образом, Вы только имеете, помнят одно специальное имя.

786
ответ дан user28409 5 December 2018 в 07:13
поделиться
my_function.func_name

существуют также другие забавные свойства функций. Тип dir(func_name) для списка их. func_name.func_code.co_code скомпилированная функция, сохраненная как строка.

import dis
dis.dis(my_function)

отобразит код в [почти 114] человекочитаемый формат.:)

40
ответ дан Markus Jarderot 5 December 2018 в 07:13
поделиться

Я видел несколько ответов, которые использовали декораторов, хотя я чувствовал, что некоторые были немного подробными. Вот что-то, что я использую для входа имен функций, а также их соответствующих входных и выходных значений. Я адаптировал его здесь, чтобы просто распечатать информацию вместо того, чтобы создать файл журнала и адаптировал его для применения к определенному примеру OP.

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()

Вывод:

{'function_name': 'my_function'}
1
ответ дан 22 November 2019 в 21:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: