Python 3:打印功能中的星号

时间:2012-09-22 09:24:18

标签: python python-3.x

我们来看看:

print([object, ...], *, sep=' ', end='\n', file=sys.stdout)

http://docs.python.org/py3k/library/functions.html?highlight=print#print

我们如何解释'*'? 通常星号('*')表示众多对象。但在这里,这对我来说是一个谜。在两个逗号之间...我甚至害怕认为这可能是一个错字。

2 个答案:

答案 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