gpt4 book ai didi

python - 模拟函数参数分配给 *args 和 **kwargs

转载 作者:太空狗 更新时间:2023-10-30 00:30:52 25 4
gpt4 key购买 nike

有没有一种简单的方法可以“模拟”参数对函数参数的赋值?

假设我有一个函数

def fn(a, b, c='default', *args, **kwargs):
print(f'a={a}, b={b}, c={c}')
print(f'args={args}')
print(f'kwargs={kwargs}')

我这样调用它:

>>> args = (1, 2, 3, 4)
>>> kwargs = {'extra_kw': 5}
>>> fn(*args, **kwargs)
a=1, b=2, c=3
args=(4,)
kwargs={'extra_kw': 5}

我想提取函数 fn 中的 argskwargs,而不调用 fn

基本上,我正在尝试编写一个函数,它将一个函数和一个参数列表和字典作为输入,并返回额外的 argskwargs:

def extract_extra_args_and_kwargs(f, *args, **kwargs):
...

该示例的预期结果为:

>>> extract_extra_args_and_kwargs(fn, args, kwargs)
((4,), {'extra_kw': 5})

我试过使用 inspect.signature,但考虑到 Python 本身必须在某处解析此赋值,我希望我可以直接访问相应的函数。

最佳答案

请注意,自 Python 3.5 以来,inspect.getcallargs 已被弃用,根据 documentation .

继续使用 inspect.signature.bind:

from inspect import signature

def extract_extra_args_and_kwargs(f, *args, **kwargs):
sig = signature(f)
bound = sig.bind(*args, **kwargs)
return bound.arguments['args'], bound.arguments['kwargs']

def fn(a, b, c='default', *args, **kwargs):
print(f'a={a}, b={b}, c={c}')
print(f'args={args}')
print(f'kwargs={kwargs}')
args = (1, 2, 3, 4)
kwargs = {'extra_kw': 5}
print(extract_extra_args_and_kwargs(fn, *args, **kwargs))

这个输出:

((4,), {'extra_kw': 5})

关于python - 模拟函数参数分配给 *args 和 **kwargs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55748500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com