如何将函数名称作为字符串获取?
如何将函数的名称作为字符串获取?
def foo():
pass
>>> name_of(foo)
"foo"
如何将函数的名称作为字符串获取?
def foo():
pass
>>> name_of(foo)
"foo"
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__
若要从内部获取当前函数或方法的名称,请考虑:
import inspect
this_function_name = inspect.currentframe().f_code.co_name
sys._getframe
也可以代替后者避免访问私有函数。inspect.currentframe
要改为获取调用函数的名称,请考虑如 中所示。f_back
inspect.currentframe().f_back.f_code.co_name
如果也使用 ,它可能会抱怨:mypy
错误:“可选[框架类型]”的项目“无”没有属性“f_code”
要抑制上述错误,请考虑:
import inspect
import types
from typing import cast
this_function_name = cast(types.FrameType, inspect.currentframe()).f_code.co_name