如何在Python中以字符串形式获取函数名?
可能重复:如何在Python中以字符串形式获取函数名?,python,Python,可能重复: 我知道我能做到: def func_name(): print func_name.__name__ 它将返回函数名为“my_func” 但是当我进入函数时,有没有一种方法可以直接通用地调用它? 比如: def func_name(): print self.__name__ 哪种Python会理解我想要代码层次结构的上部?AFAIK,没有。此外,即使是第一个方法也不完全可靠,因为函数对象可以有多个名称: In [8]: def f(): pass ...
我知道我能做到:
def func_name():
print func_name.__name__
它将返回函数名为“my_func”
但是当我进入函数时,有没有一种方法可以直接通用地调用它?
比如:
def func_name():
print self.__name__
哪种Python会理解我想要代码层次结构的上部?AFAIK,没有。此外,即使是第一个方法也不完全可靠,因为函数对象可以有多个名称:
In [8]: def f(): pass
...:
In [9]: g = f
In [10]: f.__name__
Out[10]: 'f'
In [11]: g.__name__
Out[11]: 'f'
一种可能的方法是使用: 问题是,您只能在调用实际函数之前或之后打印函数名
但实际上,既然您已经定义了函数,您就不能硬编码名称吗?不是通用的,但您可以利用inspect
import inspect
def callee():
return inspect.getouterframes(inspect.currentframe())[1][1:4][2]
def my_func():
print callee() // string my_func
Source您还可以使用
回溯模块:
import traceback
def test():
stack = traceback.extract_stack()
print stack[len(stack)-1][2]
if __name__ == "__main__":
test()
顺便说一句,self
在Python中不是一个神奇的关键字,它只是命名传递给实例方法的第一个参数的约定(该方法绑定到该实例)。我认为没有任何简单的解决方案。勾选这个问题你打算用这个名字做什么?
import traceback
def test():
stack = traceback.extract_stack()
print stack[len(stack)-1][2]
if __name__ == "__main__":
test()