如何在Python中将函数名称作为字符串?

时间:2011-09-15 14:23:47

标签: python

  

可能重复:
  How to get the function name as string in Python?

我知道我可以这样做:

def func_name():
    print func_name.__name__

将函数名称作为'my_func'返回。

但是当我进入该功能时,有没有办法直接称它为一般? 类似的东西:

def func_name():
    print self.__name__

Python会理解我想要代码层次结构的上半部分吗?

4 个答案:

答案 0 :(得分:9)

一般情况下,但您可以利用检查

import inspect

def callee():
    return inspect.getouterframes(inspect.currentframe())[1][1:4][2]

def my_func():
    print callee() // string my_func

来源http://code.activestate.com/recipes/576925-caller-and-callee/

答案 1 :(得分:5)

AFAIK,没有。此外,即使您的第一个方法也不完全可靠,因为函数对象可以有多个名称:

In [8]: def f(): pass
   ...: 

In [9]: g = f

In [10]: f.__name__
Out[10]: 'f'

In [11]: g.__name__
Out[11]: 'f'

答案 2 :(得分:5)

您还可以使用traceback模块:

import traceback

def test():
    stack = traceback.extract_stack()
    print stack[len(stack)-1][2]


if __name__ == "__main__":
    test()

答案 3 :(得分:2)

一种可能的方法是使用Decorators

def print_name(func, *args, **kwargs):
   def f(*args, **kwargs):
      print func.__name__
      return func(*args, **kwargs)
   return f

@print_name
def funky():
   print "Hello"

funky()

# Prints:
#
# funky
# Hello

问题是你只能在调用实际函数之前或之后打印函数名。

但实际上,既然你已经定义了这个函数,你难道不能只是硬编码吗?