如何在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()