如何获取函数的名称作为字符串?
def foo():
pass
>>> name_of(foo)
"foo"
原文由 X10 发布,翻译遵循 CC BY-SA 4.0 许可协议
要从其中获取当前函数或方法的名称,请考虑:
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
,它会抱怨:
错误:“Optional[FrameType]”的项目“None”没有属性“f_code”
要抑制上述错误,请考虑:
import inspect
import types
from typing import cast
this_function_name = cast(types.FrameType, inspect.currentframe()).f_code.co_name
原文由 Albert Vonpupp 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
使用
__name__
是首选方法,因为它统一应用。与func_name
不同,它也适用于内置函数:双下划线也向读者表明这是一个特殊属性。作为奖励,类和模块也有一个
__name__
属性,所以你只需要记住一个特殊的名字。