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"
传递。