将函数调用捕获为字典

Capturing a function call as dict

我正在尝试编写一个 python 函数装饰器,我的部分实现是我需要捕获函数调用并查看提供的值。我已经通过使用 inspect.signature 获得了函数签名,但我不确定如何将它与传递的参数组合起来。

假设我有以下内容

def decorator(func):
    def wrapper(*args, **kwargs):
        print(some_function_signature_getter(func, *args, **kwargs))
        return func(*args, **kwargs)
    return wrapper


@decorator
def foo(a, b, *_, **kwargs):
    return a+b

print(foo(1, 2))

如何实现 some_function_signature_getter 使我的输出类似于以下内容:

{'a': 1, 'b': 2, '_':[], 'kwargs':{}}
3

每当你想反省 function/method 签名时,你可以使用 inspect.signature。在这种情况下:

from inspect import signature

def decorator(func):
    sig = signature(func)
    def wrapper(*args, **kwargs):
        bound = sig.bind(*args, **kwargs)
        bound.apply_defaults()
        print(bound.arguments)
        return func(*args, **kwargs)
    return wrapper

*args 是一个 元组 ,不是一个列表,但除此之外这给了你你想要的:

>>> print(foo(1, 2))
{'a': 1, 'b': 2, '_': (), 'kwargs': {}}
3