python - 如何围绕 dict.update() 创建一个同样可以同时采用位置和关键字参数的函数?
问题描述
字典的内置更新函数可以将元组或字典作为参数。我想围绕它创建一个函数,它也可以同时使用元组和字典。
parDict = {}
parDict['a'] = 1
parDict['b'] = 2
parDict['group1.a'] = 3
我可以同时做到:
parDict.update(a=2, b=3)
parDict.update({'group1.a':4})
定义一个函数
def par(**x):
parDict.update(x)
我可以
par(a=2, b=3)
但我做不到
par({'group1.a' : 4})
错误消息是:par() 接受 0 个位置参数,但给出了 1 个
在我看来 {'group1.a' : 4} 是一个关键字参数(尽管 'group1.a' 不是标识符而是一个字符串。如果我处理另一个参数 {'a': 4}它有一个标识符。
如果我在函数声明中将 par(**x) 更改为 par(x) 那么我可以这样做
par({'group1.a' : 4})
但不是
par(a=2, b=3)
我当然可以做一个别名
par = parDict.update
这适用于两种类型的参数,但我想做更多的事情并且真的需要一个函数(在更新之前进行一些检查)。
我应该如何改进 par() 的参数声明或代码来处理这两种类型的参数?
解决方案
如果我理解得很好,这对你有用:
def par(*args, **kwargs):
## Merge positional and keyword arguments
kwargs.update(*args)
## Do checks and stuff on kwargs before update
# ....
parDict.update(kwargs)
推荐阅读
- ionic-framework - 将组件中的数据同步回 ionic 5 中的调用页面
- python - 将 PyAudio 麦克风输入流转换为 mp3
- clojure - 有没有办法摆脱加载的 clojure 类?
- javascript - 为什么将最大宽度设置为元素的默认宽度?
- php - 如何从 Google 表格数据中动态填充重力形式选择(下拉)菜单项
- node.js - Node-osc 有时发送 OSC 过于频繁:与 IP 地址有关?
- python - Flask-restful - 在处理上述异常的过程中,又发生了一个异常
- python - FFT-卷积。使用 4D 过滤器对 4D 图像进行卷积
- wso2 - Wso2 admin/admin 更改为 mysql 数据源后失败
- graph - 为什么深度优先搜索以这种方式检查顶点?