函数参数中的空星号有什么作用?
当我查看pickle module时,我看到了以下内容:
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。
发布于 2013-01-13 16:50:59
Bare *
用于强制调用者使用命名参数-因此当您没有以下关键字参数时,不能使用*
作为参数定义函数。
有关详细信息,请参阅this answer或Python 3 documentation。
发布于 2016-09-02 12:16:24
虽然原始答案完全回答了这个问题,但只需添加一些相关信息。单个星号的行为源自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"
传递。
发布于 2018-10-23 03:20:12
def func(*, a, b):
print(a)
print(b)
func("gg") # TypeError: func() takes 0 positional arguments but 1 was given
func(a="gg") # TypeError: func() missing 1 required keyword-only argument: 'b'
func(a="aa", b="bb", c="cc") # TypeError: func() got an unexpected keyword argument 'c'
func(a="aa", b="bb", "cc") # SyntaxError: positional argument follows keyword argument
func(a="aa", b="bb") # aa, bb
上面使用**kwargs的示例
def func(*, a, b, **kwargs):
print(a)
print(b)
print(kwargs)
func(a="aa",b="bb", c="cc") # aa, bb, {'c': 'cc'}
https://stackoverflow.com/questions/14301967
复制相似问题