Python 获取调用函数的名称和参数值

在Python开发中,有时候我们需要获取当前函数的名称以及调用该函数时传递的参数值。这在调试和日志记录等场景下非常有用。本文将介绍如何使用Python获取函数名称和参数值,并提供相应的代码示例。

获取函数名称

Python内置了一个名为inspect的模块,可以用来获取函数的名称。inspect模块提供了一系列有用的函数和类,用于检查活跃对象的类型、获取源代码、解析堆栈跟踪等。

通过使用inspect模块中的currentframe函数,我们可以获取当前执行的帧(frame),然后通过该帧获取当前函数的名称。

import inspect

def get_function_name():
    frame = inspect.currentframe()
    return frame.f_back.f_code.co_name

print(get_function_name())  # 输出:get_function_name

以上代码中,get_function_name函数中的f_back.f_code.co_name可以获取到当前函数的名称。

获取参数值

要获取函数调用时传递的参数值,我们可以使用inspect模块的signature函数和bind方法。signature函数可以获取函数的参数签名,bind方法可以将实际参数绑定到指定的函数参数上。

下面是一个例子,演示了如何获取函数调用时传递的参数值。

import inspect

def add(a, b):
    frame = inspect.currentframe()
    args, _, _, values = inspect.getargvalues(frame)
    for arg in args:
        print(f"{arg} = {values[arg]}")

add(1, 2)

输出结果为:

a = 1
b = 2

以上代码中,我们通过inspect.getargvalues(frame)获取到了当前函数的参数名称和参数值。然后我们遍历参数名称,根据参数名称获取对应的参数值。

结合使用获取函数名称和参数值

将获取函数名称和参数值结合起来,可以编写一个通用的函数,用于获取当前函数的名称和参数值,并将其打印出来。

import inspect

def get_function_info():
    frame = inspect.currentframe()
    function_name = frame.f_back.f_code.co_name
    args, _, _, values = inspect.getargvalues(frame.f_back)
    print(f"Function Name: {function_name}")
    print("Parameters:")
    for arg in args:
        print(f"{arg} = {values[arg]}")

def example_function(a, b):
    get_function_info()

example_function(1, 2)

运行以上代码,输出结果为:

Function Name: example_function
Parameters:
a = 1
b = 2

以上代码中,我们定义了一个名为get_function_info的函数,用于获取当前函数的名称和参数值。然后我们在一个示例函数example_function中调用了get_function_info函数,以演示获取函数名称和参数值的用法。

总结

本文介绍了如何使用Python获取函数名称和参数值。通过使用inspect模块的相关函数和方法,我们可以轻松地获取当前函数的名称和调用时传递的参数值。这在调试和日志记录等场景下非常有用。

希望本文对你理解如何获取函数名称和参数值有所帮助!