将函数调用捕获为字典
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
我正在尝试编写一个 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