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

jle*_*and 7 python

可能重复:
如何在Python中将函数名称作为字符串?

我知道我可以这样做:

def func_name():
    print func_name.__name__
Run Code Online (Sandbox Code Playgroud)

这将把函数的名称作为'my_func'返回.

但是当我进入函数时,有没有办法直接称它为一般?就像是 :

def func_name():
    print self.__name__
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*tta 9

不是一般,但你可以利用检查

import inspect

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

def my_func():
    print callee() // string my_func
Run Code Online (Sandbox Code Playgroud)

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


NPE*_*NPE 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'
Run Code Online (Sandbox Code Playgroud)


Fem*_*emi 5

您也可以使用该traceback模块:

import traceback

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


if __name__ == "__main__":
    test()
Run Code Online (Sandbox Code Playgroud)