Это работает для меня под Linux:
mongo < script.js
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__
атрибут также, таким образом, Вы только имеете, помнят одно специальное имя.
my_function.func_name
существуют также другие забавные свойства функций. Тип dir(func_name)
для списка их. func_name.func_code.co_code
скомпилированная функция, сохраненная как строка.
import dis
dis.dis(my_function)
отобразит код в [почти 114] человекочитаемый формат.:)
Я видел несколько ответов, которые использовали декораторов, хотя я чувствовал, что некоторые были немного подробными. Вот что-то, что я использую для входа имен функций, а также их соответствующих входных и выходных значений. Я адаптировал его здесь, чтобы просто распечатать информацию вместо того, чтобы создать файл журнала и адаптировал его для применения к определенному примеру 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'}