Python在函数参数中裸露星号

函数参数中的星号是什么?

当我看着泡菜模块,我看到这个:(http://docs.python.org/3.3/library/pickle.html#pickle.dump)

pickle.dump(obj, file, protocol=None, *, fix_imports=True) 

我知道前面参数的单个和双重星号(对于可变数量的参数),但是这并没有什么先例。 我很确定这与泡菜无关。 这可能只是这种情况的一个例子。 我只是在把这封信发给口译员时才知道它的名字:

 >>> def func(*): ... pass ... File "<stdin>", line 1 SyntaxError: named arguments must follow bare * 

如果有关系,我使用python 3.3.0。

Bare *用于强制调用者使用命名参数 – 因此,如果没有以下关键字参数,则不能使用*作为参数来定义函数。

有关更多详细信息,请参阅此答案或Python 3文档 。

虽然原来的答案完全回答了这个问题,只是增加了一些相关的信息。 单星号的行为来源于PEP-3102 。 引用相关部分:

 The second syntactical change is to allow the argument name to be omitted for a varargs argument. The meaning of this is to allow for keyword-only arguments for functions that would not otherwise take a varargs argument: def compare(a, b, *, key=None): ... 

在简单的英语中,这意味着要传递key的值,您需要明确地将其作为key="value"传递。