当前位置:首页 > 行业动态 > 正文

python如何获取函数名称

使用 __name__属性获取函数名称。

Python如何获取函数名

在Python中,我们可以使用内置的__name__属性来获取函数名,这个属性通常用于判断一个函数是作为模块导入还是直接运行的,当我们直接运行一个函数时,__name__属性的值为'__main__',而当我们将一个函数作为模块导入时,__name__属性的值为模块名,下面我们通过一个实例来详细了解如何使用__name__属性获取函数名。

我们创建一个名为my_module.py的文件,内容如下:

def my_function():
    pass
if __name__ == '__main__':
    print("This is my_function")

在这个例子中,我们定义了一个名为my_function的函数,并在模块级别使用了if __name__ == '__main__':判断语句,当直接运行my_module.py时,会执行这个判断语句,从而打印出"This is my_function"。

接下来,我们在另一个文件中导入my_module,并调用my_function():

import my_module
my_module.my_function()

运行这段代码,会输出"This is my_function",这说明我们成功地获取到了函数名。

如何获取当前正在执行的函数名呢?我们可以在调用函数的地方添加一个特殊的参数functools.partial(print, f'Called from {inspect.currentframe().f_code.co_name}'),这样就可以在调用函数时打印出当前正在执行的函数名,下面是一个示例:

import functools
import inspect
from my_module import my_function
def call_my_function(func=my_function):
    func()
    functools.partial(print, f'Called from {inspect.currentframe().f_code.co_name}')()
call_my_function()

运行这段代码,会输出"Called from call_my_function",这说明我们成功地获取到了当前正在执行的函数名。

问题与解答:

1、如何获取模块中的其他函数名?

答:可以使用dir()函数列出模块中的所有属性和方法,然后筛选出其中的函数名。

import my_module
print([name for name in dir(my_module) if callable(getattr(my_module, name))])

2、如何获取类中的其他方法名?

答:可以使用相同的方法,即使用dir()函数列出类的所有属性和方法,然后筛选出其中的方法名。

class MyClass:
    def method1(self): pass
    def method2(self): pass
print([name for name in dir(MyClass) if callable(getattr(MyClass, name))])

3、如何获取当前脚本的其他函数名?

答:可以使用相同的方法,即使用dir()函数列出当前脚本的所有属性和方法,然后筛选出其中的函数名。

import sys as _sys
import os as _os
import math as _math
print([name for name in dir(globals()) if callable(getattr(globals(), name)) and not name.startswith('_')])
0