如何获取函数名称作为字符串?

新手上路,请多包涵

如何获取函数的名称作为字符串?

 def foo():
    pass

>>> name_of(foo)
"foo"

原文由 X10 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 254
2 个回答
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__ 属性,所以你只需要记住一个特殊的名字。

原文由 user28409 发布,翻译遵循 CC BY-SA 2.5 许可协议

要从其中获取当前函数或方法的名称,请考虑:

 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题