2

Python中是否有类似PHP的__FUNCTION__魔术常数?

def func(x):
    print(__FUNCTION__)  ## <function func at 0x00B02810>
    print(__FUNCTION__.__name__)  ## func

升级版:

举个例子:

import sys

def func(f = "Foo"):
    b = "Bar"
    print(sys._getframe().f_code) ## <code object func at 0x00B09A20, file "C:\py\func.py", line 5>
    print(func.__code__) ## <code object func at 0x00B09A20, file "C:\py\func.py", line 5>, the same

    print(sys._getframe().f_trace) ## None
    print(sys._getframe().f_locals) ## {'b': 'Bar', 'f': 'Foo'}
    print(sys._getframe().f_lineno) ## 12

if __name__ == "__main__":
    func()
4

3 回答 3

3

您可以使用检查模块获得其中的一些功能。

import inspect

def foo():
    code = inspect.currentframe().f_code
    print code.co_name

您还可以使用上面函数中创建的变量exec codewhere执行代码对象中的代码。code

请注意,这inspect.currentframe()为您提供了与 相同的对象sys._getframe(0),但它实际上是要以这种方式使用的。

于 2013-02-20T18:01:00.680 回答
2

Python 中没有任何此类功能。

可以滥用该sys._getframe()函数来访问当前代码对象:

import sys

def foo():
    print sys._getframe(0).f_code.co_name

但这只会打印最初定义的函数名称。如果将foo函数分配给另一个标识符,上面的代码将继续打印foo

>>> bar = foo
>>> bar()
'foo'
于 2013-02-20T17:48:50.280 回答
2

这就是你所追求的吗?

In [97]: def a():
    ...:     print sys._getframe().f_code.co_name
    ...:     

In [98]: a()
a

资源

于 2013-02-20T17:51:09.213 回答