Python中__func__(来自C)的等价物

Ale*_*lex 6 python python-2.x

我想为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)


Dav*_*son 8

sys._getframe可以做到这一点:

import sys

def foobar():
    print sys._getframe().f_code.co_name
Run Code Online (Sandbox Code Playgroud)


cha*_*ite 6

嗯,是的,有办法......

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想要什么=)