如何围绕 dict.update() 创建一个同样可以同时采用位置和关键字参数的函数?
How to make a function around dict.update() that similarly can take both positional and key-word args?
字典的内置更新函数可以将元组或字典作为参数。我想围绕它做一个函数,它也可以同时接受元组和字典。
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)
字典的内置更新函数可以将元组或字典作为参数。我想围绕它做一个函数,它也可以同时接受元组和字典。
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)