通过inspect.getframeinfo
模块。我的意思是-在Python中没有做到这一点的直接方法- 多数情况下,您可以在没有功能的情况下掌握代码对象,而这只是通过帧自省。
Inspect的getframeinfo函数确实返回一些有关正在运行的框架的信息,然后您可以通过获取函数名称来检索该函数对象。
严格地说,这取决于实现,并且有一些缺点:
>>> import inspect
>>> def a():
... return inspect.currentframe()
...
>>> inspect.getframeinfo(a())
Traceback(filename='<stdin>', lineno=2, function='a', code_context=None, index=None)
>>> b = inspect.getframeinfo(a())
>>> b.function
'a'
另一种方式(但仍取决于实现方式)是使用gc模块(垃圾收集器)获取对所述代码对象的引荐来源。
>>> import gc
>>> from types import FunctionType
>>> def a(): pass
...
>>> code = a.__code__
>>> [obj for obj in gc.get_referrers(code) if isinstance(obj, FunctionType) ][0]
<function a at 0x7f1ef4484500>
>>>
-这是针对Python 3的-对于Python 2,应替换__code__
为func_code