代码之家  ›  专栏  ›  技术社区  ›  pythonic metaphor

python关键字参数

  •  0
  • pythonic metaphor  · 技术社区  · 16 年前

    我有几层函数调用,传递关键字参数的通用字典:

    def func1(**qwargs):
        func2(**qwargs)
        func3(**qwargs)
    

    我想在随后的一些函数调用中提供一些默认参数,如下所示:

    def func1(**qwargs):
        func2(arg = qwargs.get("arg", default), **qwargs)
        func3(**qwargs)
    

    这种方法的问题是,如果arg在qwargs内,则会引发一个typeerror,其中包含“got multiple values for keyword argument”。

    我不想将qwargs[“arg”]设置为默认值,因为func3在没有许可证的情况下获取此参数。我可以复制qwargs并在副本中设置“arg”,但是qwargs中可能有大的数据结构,我不想复制它们(可能copy.copy不会,只有copy.deepcopy?).

    这里的蟒蛇是做什么的?

    2 回复  |  直到 13 年前
        1
  •  2
  •   Alex Martelli    16 年前

    只需构建并使用另一个dict来调用 func2 ,保留原始文件,以便稍后调用 func3 :

    def func1(**qwargs):
        d = dict(arg=default)
        d.update(qwqargs)
        func2(**d)
        func3(**qwargs)
    

    如果您想设置 arg 在里面 qwargs 重写 default . 否则(如果你想 违约 覆盖任何可能的设置 精氨酸 在里面 QWARGS ):

    def func1(**qwargs):
        d = dict(qwargs, arg=default)
        func2(**d)
        func3(**qwargs)
    

    从关键字参数到 dict 重写位置参数中的值(如果有)。

        2
  •  1
  •   Florian Diesch    16 年前

    要使用相同的键和值创建新的dict,可以使用

     newdict=dict(qwargs)
    

    如果qwargs没有包含太多便宜的密钥。

    如果有可能,您可以重写函数,使其参数真正成为dict而不是多个参数。