Python:一些“__magic__”属性用于引用该函数中的函数

时间:2013-02-20 17:47:40

标签: python python-3.x

Python中是否有PHP __FUNCTION__魔术常量的模拟?

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

UPD:

举个例子:

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()

3 个答案:

答案 0 :(得分:3)

您可以使用inspect module获得部分功能。

import inspect

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

您还可以使用exec code从代码对象执行代码,其中code是上述函数中创建的变量。

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

答案 1 :(得分:2)

Python中没有任何此类功能。

可以滥用sys._getframe() function来访问当前代码对象,但是:

import sys

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

但这只会打印最初定义的函数名称。如果您将foo功能分配给其他标识符,则上述代码将继续打印foo

>>> bar = foo
>>> bar()
'foo'

答案 2 :(得分:2)

这就是你追求的吗?

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

In [98]: a()
a

Source