python语法错误*带有可选参数的args

2024-06-16 08:13:06 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么这是一个语法错误??做这件事的适当方法是什么?在

>>> def f(*args, option=None):
  File "<stdin>", line 1
    def f(*args, option=None):
                      ^
SyntaxError: invalid syntax

Tags: 方法nonedefstdinlineargsfileoption
3条回答

python2不支持只支持关键字的参数。如果您真的希望Python 2函数具有只能通过关键字传递的参数,则需要使用**kwargs并亲自验证关键字参数:

def my_max(*args, **kwargs):
    '''Emulate the built-in max, including the keyword-only key argument.'''
    key = kwargs.pop('key', None)
    if kwargs:
        raise TypeError('my_max() got an unexpected keyword argument {!r}'.format(next(iter(kwargs))))
    if key is None:
        # max doesn't support key=None
        return max(*args)
    else:
        return max(*args, key=key)

这在python2中不受支持,其中*args必须出现在函数调用签名中的任何命名/默认参数之后。在

适当的方法是升级到python3,在那里它是受支持的。在

>>> def f(*args, option=None):
...     print(args, option)
...     
>>> f('not_option')
('not_option',) None
>>> f(1, 2, option='beast mode on!!!')
(1, 2) beast mode on!!!

在Python2中,所有位置参数都必须在任何*args参数之前。在Python3中,您当前的语法是合法的,将option创建为“仅限关键字”参数。在

所以,你可以改变论点的顺序:

def f(option=None, *args):
    ...

如果您想提供任何其他参数,这将需要您提供一个option参数,这可能不是您想要的。在

另一个选择是使用**kwargs语法来捕获传递给函数的关键字参数。您可以检查它是否有option(而不是任何其他意外的关键字),而无需将其命名为位置参数:

^{pr2}$

或者可以升级到python3。在

相关问题 更多 >