我如何得到一个函数的名字作为字符串?

def foo():
    pass

>>> name_of(foo)
"foo"

当前回答

该函数将返回调用方的函数名。

def func_name():
    import traceback
    return traceback.extract_stack(None, 2)[0][2]

这就像Albert Vonpupp用友好的包装给出的答案。

其他回答

你可以通过使用特殊的__name__变量来获取一个字符串形式的函数名。

def my_function():
    pass

print(my_function.__name__) # prints "my_function"

sys._getframe()并不保证在Python的所有实现中都可用(参见ref),你可以使用traceback模块来做同样的事情,例如。

import traceback
def who_am_i():
   stack = traceback.extract_stack()
   filename, codeline, funcName, text = stack[-2]

   return funcName

调用stack[-1]将返回当前进程的详细信息。

my_function.func_name

函数还有其他有趣的属性。输入dir(func_name)来列出它们。func_name.func_code。Co_code是编译后的函数,存储为字符串。

import dis
dis.dis(my_function)

将以几乎人类可读的格式显示代码。:)

Try

import sys
fn_name = sys._getframe().f_code.co_name

进一步的参考 https://www.oreilly.com/library/view/python-cookbook/0596001673/ch14s08.html

import inspect

def my_first_function():
    func_name = inspect.stack()[0][3]
    print(func_name)  # my_first_function

or:

import sys

def my_second_function():
    func_name = sys._getframe().f_code.co_name
    print(func_name)  # my_second_function