如何解决如何围绕 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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。