我想为python创建某种调试输出,并希望将函数名传递给另一个函数进行输出.
我发现这样做的唯一合理方式是:
def foobar():
print 'hello world'
print foobar.__name__
Run Code Online (Sandbox Code Playgroud)
是否有一些东西对当前函数做同样的事情来改进该行的复制和粘贴?
喜欢C等价物printf("%s", __func__).
Kru*_*lur 10
你可以尝试的一件事是创建一个执行此操作的装饰器:
def traceme(func):
def newfunc(*args, **kwargs):
ret = func(*args, **kwargs)
print func.__name__
return ret
return newfunc
@traceme
def foobar():
print 'hello world'
Run Code Online (Sandbox Code Playgroud)
sys._getframe可以做到这一点:
import sys
def foobar():
print sys._getframe().f_code.co_name
Run Code Online (Sandbox Code Playgroud)
嗯,是的,有办法......
print sys._getframe().f_code.co_name
Run Code Online (Sandbox Code Playgroud)
你甚至可以使它成为一个函数(获取前一帧的名称):
def function_name():
return sys._getframe().f_back.f_code.co_name
Run Code Online (Sandbox Code Playgroud)
愚蠢的例子只是为了表明它有效:
>>> def bar():
... return function_name()
...
>>> bar()
'bar'
Run Code Online (Sandbox Code Playgroud)
(请注意,在克鲁梅尔尔的回答显示的装饰是一个更好的解决问题的方法,但它是可以做到的,你在Python想要什么=)
| 归档时间: |
|
| 查看次数: |
7074 次 |
| 最近记录: |