本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
How to get the function name as string in Python?
我知道我能做到:
1 2 | def func_name(): print func_name.__name__ |
它将返回函数名'my_func'。
但是当我研究这个函数时,有没有一种方法可以直接调用它?喜欢的东西:
1 2 | def func_name(): print self.__name__ |
在哪种Python中,我想要代码层次结构的上层?
不是一般意义上的,但是您可以利用inspect
1 2 3 4 5 6 7 | 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 2 3 4 5 6 7 8 9 | import traceback def test(): stack = traceback.extract_stack() print stack[len(stack)-1][2] if __name__ =="__main__": test() |
AFAIK,没有。此外,即使你的第一个方法也不完全可靠,因为一个函数对象可以有多个名称:
1 2 3 4 5 6 7 8 9 10 | In [8]: def f(): pass ...: In [9]: g = f In [10]: f.__name__ Out[10]: 'f' In [11]: g.__name__ Out[11]: 'f' |
一种可能的方法是使用装饰器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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 |
问题是,您只能在调用实际函数之前或之后打印函数名。
实际上,既然已经定义了函数,就不能硬编码名称吗?