如何围绕 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)