def foo(*args, this="default", **kwargs):
pass
File "foo.py", line 1
def foo(*args, this="default", **kwargs):
^
SyntaxError: invalid syntax
由于我有一组不可知的位置参数,一组不可知的关键字参数,以及一个或两个已知的关键字参数,我的另一个选择是:
def foo(*args, **kwargs):
this = kwargs.pop("this", "default")
...
所以,因为对于为什么事情是这样的,似乎总是有一个很好的答案,我想知道。为什么不允许这样做?
编辑:
谢谢@dano
Added in Python3
答案 0 :(得分:2)
您尝试使用this
做的是使其成为仅限关键字的参数;没有办法提供位置论证。在Python 3.0中添加了支持此功能。 Here是描述其添加的PEP,以及其他相关增强功能。它的基本原理部分非常清楚地描述了这个问题:
当前的Python函数调用范例允许参数 可以按位置或按关键字指定。一个论点可以 通过名称或隐含地按位置填写。
通常情况下,功能需要采用 可变数量的参数。 Python语言支持这一点 使用'varargs'语法('* name'),它指定任何语法 '遗留'参数作为a传递给varargs参数 元组。
对此的一个限制是,目前,所有的常规 必须在vararg插槽之前填充参数槽。
这并不总是令人满意的。人们可以很容易地想到一个功能 它采用可变数量的参数,但也需要一个 或更多关键字参数形式的“选项”。目前, 唯一的方法是定义一个varargs参数, 和'关键字'参数(** kwargs),然后手动提取 字典中所需的关键字。
基本上,这只是varargs原始实现的限制,直到Python 3才解决。