【问题标题】:How to use Python3 named arguments and optional arguments at the same time如何同时使用 Python3 命名参数和可选参数
【发布时间】:2020-09-02 20:12:52
【问题描述】:

给定:

def named_args_with_optional_args(arg1, arg2, *optional_args, kwarg1=1, kwarg2=1):
    pass

这两项工作:

named_args_with_optional_args(arg1=1, arg2=1,**{"kwarg1":1,"kwarg2":1})  # all args named, no optional args
named_args_with_optional_args(1, 1, *(1,2,3), **{"kwarg1":1,"kwarg2":1}) # optional args used, *but no named args*

但是,如何同时使用命名参数和可选参数调用named_args_with_optional_args?我试过了:

named_args_with_optional_args(arg1=1,arg2=1, *(1,2,3), **{"kwarg1":1,"kwarg2":1})  # TypeError: named_args_with_optional_args() got multiple values for argument 'arg1'
named_args_with_optional_args(arg1=1,arg2=1, optional_args=(1,2,3), **{"kwarg1":1,"kwarg2":1})  # TypeError: named_args_with_optional_args() got an unexpected keyword argument 'optional_args'
named_args_with_optional_args(arg1=1,arg2=1, 1,2,3, **{"kwarg1":1,"kwarg2":1})  # SyntaxError: positional argument follows keyword argument
named_args_with_optional_args(arg1=1,arg2=1, *optional_args=(1,2,3), **{"kwarg1":1,"kwarg2":1})  # SyntaxError: invalid syntax

【问题讨论】:

  • 你可以做def named_args_with_optional_args(*optional_args, arg1, arg2, kwarg1=1, kwarg2=1):和named_args_with_optional_args(1, 2, 3, arg1=4, arg2=5, kwarg1=6, kwarg2=7)。

标签: python python-3.x syntax


【解决方案1】:

您需要先拥有*optional_args:

def named_args_with_optional_args(*optional_args, arg1, arg2, kwarg1=1, kwarg2=1):
    print('optional_args', optional_args)
    print('arg1', arg1)
    print('arg2', arg2)
    print('kwarg1', kwarg1)
    print('kwarg2', kwarg2)

然后

named_args_with_optional_args(1,2,3, arg1=4, arg2=5, **{"kwarg1":6,"kwarg2":7})

会起作用

optional_args (1, 2, 3)
arg1 4
arg2 5
kwarg1 6
kwarg2 7

但是,这将迫使您将 arg1 和 arg2 作为 kwargs 传递,因为 Python 无法知道 *optional_args 何时结束。

named_args_with_optional_args(1, 2, 3, 4, 5, **{"kwarg1":6,"kwarg2":7})

将不工作。

【讨论】:

猜你喜欢
  • 2014-08-16
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
  • 2019-12-31
  • 2012-03-14
相关资源
最近更新 更多