如何在Python中获取函数名字符串?

8 投票
4 回答
1089 浏览
提问于 2025-04-17 02:22

可能是重复的问题:
如何在Python中获取函数名作为字符串?

我知道我可以这样做:

def func_name():
    print func_name.__name__

这会返回函数的名字,结果是'my_func'。

但是当我在这个函数里面时,有没有办法直接以一种通用的方式调用它呢? 类似于:

def func_name():
    print self.__name__

这样Python就能明白我想要的是我代码结构的上层部分?

4 个回答

5

你还可以使用 traceback 模块:

import traceback

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


if __name__ == "__main__":
    test()
9

不是通用的,但你可以利用 inspect 模块

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/

6

据我所知,似乎没有这样的东西。而且,就算是你提到的第一种方法,也不是完全可靠,因为一个函数对象可以有多个名字:

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

In [9]: g = f

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

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

撰写回答