2013-01-13 153 views
85

函数参数中的裸星号有什么作用?函数参数中的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。

回答

85

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

有关更多详细信息,请参见this answerPython 3 documentation

+0

请注意,所有位置(未命名)参数,包括'* args',必须出现在裸*之前。 – BallpointBen

17

虽然原来的答案完全回答了问题,只是添加了一些相关信息。单个星号的行为来自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"