Python函数调用如何避免重复使用**解包多个字典参数
实现方法
不用修改原有API的内部逻辑,写一个极轻量化的包装函数就能实现目标效果:自动合并传入的多个参数字典后统一解包传给原函数,完全兼容你之前预先定义的常用参数字典。
包装器代码
from functools import wraps def pack_dict_args(func): @wraps(func) def inner(*param_dicts): merged = {} for d in param_dicts: merged.update(d) return func(**merged) return inner
使用时只需要给你要调用的目标API套一层这个包装器即可:
# 假设myf是你原本要调用的长参数API myf = pack_dict_args(myf)
调用效果
包装完成后就可以省略所有重复的**符号,直接传入你预先定义好的参数字典:
# 你之前预定义的常用参数组合不需要做任何修改 a_T = {'API parameter a': True} a_F = {'API parameter a': False} b_100 = {'API parameter b': 100} b_0 = {'API parameter b': 0} hello = {'API parameter c': 'hello'} bye = {'API parameter d': 'goodbye'} # 你期望的简洁调用形式可以直接运行 myf(a_T, bye) myf(b_0) myf(a_F, b_100, hello, bye)
补充说明
- 多个字典传入时如果存在重名参数,靠后传入的字典值会覆盖靠前的值,和你原来连续写多个
**解包的执行逻辑完全一致,不会出现行为偏差。 - 如果需要同时支持普通关键字传参,只需要给包装器的
inner函数加上**kwargs参数,把kwargs也合并到merged字典里即可,兼容myf(a_T, 其他普通参数=xxx)的混合调用场景。
内容的提问来源于stack exchange,提问作者aeiou
相关产品推荐
相关产品推荐

