python - 模拟将函数参数分配给 *args 和 **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}
>>> fn(*args, **kwargs)
a=1, b=2, c=3
args=(4,)
kwargs={'extra_kw': 5}
我想提取函数中的内容args
和内容,而无需调用.kwargs
fn
fn
基本上,我正在尝试编写一个函数,该函数将函数和参数列表和字典作为输入,并返回额外的args
和kwargs
:
def extract_extra_args_and_kwargs(f, *args, **kwargs):
...
该示例的预期结果是:
>>> extract_extra_args_and_kwargs(fn, args, kwargs)
((4,), {'extra_kw': 5})
我试过玩弄inspect.signature
,但鉴于 Python 本身必须在某个地方解决这个任务,我希望我可以直接访问相应的函数。
解决方案
这是inspect.getcallargs
:
>>> import inspect
>>> def fn(a, b, c='default', *args, **kwargs):
... pass
...
>>> inspect.getcallargs(fn, 1,2,3,4, extra_kw=5)
{'a': 1, 'b': 2, 'c': 3, 'args': (4,), 'kwargs': {'extra_kw': 5}}
您extract_extra_args_kwargs
在问题中定义的内容将是一个简单的包装器。
def extract_extra_args_kwargs(fn, args, kwargs):
x = inspect.getcallargs(fn, *args, **kwargs)
return x['args'], x['kwargs']
推荐阅读
- angular - Angular 9 SSR - 在哪里设置全局['window'](使用多米诺骨牌)?
- mysql - 我在 Wordpress 中工作,在这种情况下我有一个疑问
- c# - 我为 A 和 B 打印了哈希码,我得到了相同的地址。两个对象在内存中并排创建。但是怎么会有相同的地址呢?
- regex - Watson Assistant 实体中的模式错误
- excel - SSAS - 尽管有值,但属性显示为空
- java - 为什么 int[] aa={'12','2'}; 无效且 int[] aa={'1','2'}; 已验证?错误显示是无效的字符常量
- python - Python中赋值错误之前引用的局部变量
- asp.net - 从未知线程收集 gc 时出现致命错误
- java - 文件中的 MIME 类型
- vue.js - Teamcity 上的 Jest 单元测试