我们来看一下:
print([object, ...], *, sep=' ', end='\n', file=sys.stdout)
http://docs.python.org/py3k/library/functions.html?highlight=print#print
我们该如何解释'*'
呢?通常星号 ('*') 表示许多对象。但这对我来说是个谜。在两个逗号之间......我什至害怕认为这可能是一个错字。
我们来看一下:
print([object, ...], *, sep=' ', end='\n', file=sys.stdout)
http://docs.python.org/py3k/library/functions.html?highlight=print#print
我们该如何解释'*'
呢?通常星号 ('*') 表示许多对象。但这对我来说是个谜。在两个逗号之间......我什至害怕认为这可能是一个错字。
这是文档中的一个错误,由将新的 Python 3 功能应用到不应该使用它的地方的人插入。它已被修复(参见issue 15831)。
使用的文档中的函数签名以伪形式语法形式给出,但*
只有在使用实际 python 语法时添加标记才有意义。在这种情况下,签名的[object, ...], *
部分应该被列为*objects
代替。
更正后的版本现在为:
print(*objects, sep=' ', end='\\n', file=sys.stdout, flush=False)
文档的在线开发版本目前尚未更新,但文档来源已更正;我会看看我们是否可以请求重新生成文档。
需要明确的是:*
语法在 Python 3 中有效,这意味着以下参数只能用作关键字参数,而不是位置参数。然而,这不适用于该print()
函数,因为无论如何都要打印所有位置参数,并且永远不会被误认为是关键字参数。
这意味着以下参数仅是关键字,即您不能将它们作为位置参数提供,您必须使用它们的名称,例如:
>>> 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