Python关键字参数
我有几个层次的函数调用,传递关键字参数的通用字典:Python关键字参数,python,keyword-argument,Python,Keyword Argument,我有几个层次的函数调用,传递关键字参数的通用字典: def func1(**qwargs): func2(**qwargs) func3(**qwargs) 我想在一些后续函数调用中提供一些默认参数,如下所示: def func1(**qwargs): func2(arg = qwargs.get("arg", default), **qwargs) func3(**qwargs) 这种方法的问题是,如果arg在qwargs中,则会引发一个TypeError,
def func1(**qwargs):
func2(**qwargs)
func3(**qwargs)
我想在一些后续函数调用中提供一些默认参数,如下所示:
def func1(**qwargs):
func2(arg = qwargs.get("arg", default), **qwargs)
func3(**qwargs)
这种方法的问题是,如果arg在qwargs中,则会引发一个TypeError,其中包含“Get multiple values for keyword argument”
我不想将qwargs[“arg”]设置为默认值,因为func3在没有保证的情况下获取此参数。我可以制作qwargs的copy.copy并在副本中设置“arg”,但qwargs中可能有大型数据结构,我不想复制它们(可能copy.copy不会,只有copy.deepcopy?)
pythonic在这里要做什么?只需构建并使用另一个dict来调用
func2
,将原始dict留给以后调用func3
:
def func1(**qwargs):
d = dict(arg=default)
d.update(qwqargs)
func2(**d)
func3(**qwargs)
如果您希望在qwargs
中设置arg
,以覆盖默认值
。否则(如果希望default
覆盖qwargs
中arg
的任何可能设置):
由于
dict
的关键字参数会覆盖位置参数中的值(如果有)。只需构建并使用另一个dict来调用func2
,将原始dict留给以后调用func3
:
def func1(**qwargs):
d = dict(arg=default)
d.update(qwqargs)
func2(**d)
func3(**qwargs)
如果您希望在qwargs
中设置arg
,以覆盖默认值
。否则(如果希望default
覆盖qwargs
中arg
的任何可能设置):
因为
dict
的关键字参数会覆盖位置参数(如果有)中的值。以使用相同的键和值创建新的dict
newdict=dict(qwargs)
如果qwargs不包含太多的密钥,那就便宜了
如果可能的话,您可以重写函数,使其参数真正成为dict,而不是多个参数。使用您可以使用的相同键和值创建新dict
newdict=dict(qwargs)
如果qwargs不包含太多的密钥,那就便宜了
如果可能的话,您可以重写函数,使其参数真正成为dict,而不是多个参数。
qwargs
听起来像数据,func*
听起来像方法。你有没有想过把这两个学生合并成一个班?如果这样做,那么func2
的签名可能会简化为类似func2(self,arg=default)
。qwargs
听起来像数据,而func*
听起来像方法。你有没有想过把这两个学生合并成一个班?如果您这样做,那么func2
的签名可能会简化为类似func2(self,arg=default)
。。。