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