Python中__func__(来自C)的等价物
我想为Python创建一些调试输出,并希望将函数名传递给另一个函数进行输出。
我找到的唯一合理的方法是:
def foobar():
print 'hello world'
print foobar.__name__
有没有什么方法可以做到这一点,以便在当前函数中更方便地复制和粘贴这一行呢?
就像C语言中的那个写法 printf("%s", __func__)
。
4 个回答
9
你可以尝试创建一个装饰器来实现这个功能:
def traceme(func):
def newfunc(*args, **kwargs):
ret = func(*args, **kwargs)
print func.__name__
return ret
return newfunc
@traceme
def foobar():
print 'hello world'
11
嗯,是的,确实有办法...
print sys._getframe().f_code.co_name
你甚至可以把它做成一个函数(获取上一个框架的名称):
def function_name():
return sys._getframe().f_back.f_code.co_name
这是一个简单的例子,只是为了展示它是怎么工作的:
>>> def bar():
... return function_name()
...
>>> bar()
'bar'
(注意,Krumelur的回答中提到的装饰器是解决这个问题的更好方法,但在Python中确实可以做到你想要的 =)
10
sys._getframe 可以做到这一点:
import sys
def foobar():
print sys._getframe().f_code.co_name