我们来看看:
print([object, ...], *, sep=' ', end='\n', file=sys.stdout)
http://docs.python.org/py3k/library/functions.html?highlight=print#print
我们如何解释'*'
?
通常星号('*')表示众多对象。但在这里,这对我来说是一个谜。在两个逗号之间...我甚至害怕认为这可能是一个错字。
答案 0 :(得分:15)
这是文档中的一个错误,由某人应用新的Python 3功能插入到不应该使用它的地方。它已被修复(见issue 15831)。
所用文档中的函数签名以伪形式语法形式给出,但只有使用实际的python语法才能添加*
标记。在这种情况下,签名的[object, ...], *
部分应该被列为*objects
。
更正后的版本现为:
print(*objects, sep=' ', end='\\n', file=sys.stdout, flush=False)
在线development version of the documentation截至目前尚未更新,但documentation source has been corrected;我会看看我们是否可以要求重新生成文档。
要明确:*
语法在Python 3中有效,意味着以下参数只能用作关键字参数,而不能用作位置参数。但是不适用于print()
函数,因为所有位置参数都要打印,并且永远不会被误认为是关键字参数。
答案 1 :(得分:13)
这意味着以下参数仅为关键字,即您不能将它们作为位置参数提供,您必须使用它们的名称,例如:
>>> def f(*, a): pass
...
>>> f(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: f() takes exactly 0 positional arguments (1 given)
>>> f(a=1)
>>> # ok
另一个例子:
>>> def g(*a, b): pass
...
>>> g(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: g() needs keyword-only argument b
>>> g(1, 2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: g() needs keyword-only argument b
>>> g(1, b=2)
>>> # ok
>>> g(1, 2, b=3)
>>> # ok