Python 3:打印功能中的星号

Kif*_*sif 13 python python-3.x

我们来看一下:

print([object, ...], *, sep=' ', end='\n', file=sys.stdout)
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*ers 15

这是文档中的一个错误,由某人应用新的Python 3功能插入到不应该使用它的地方.它已被修复(见问题15831).

所使用的文档中的函数签名以伪形式语法形式给出,但*只有使用实际的python语法才能添加标记.在这种情况下[object, ...], *,签名的部分应该被列为*objects.

更正后的版本现为:

print(*objects, sep=' ', end='\\n', file=sys.stdout, flush=False)

文档的在线开发版本截至目前尚未更新,但文档来源已得到纠正 ; 我会看看我们是否可以请求重新生成文档.

需要明确的是:*语法在Python 3中有效,意味着以下参数只能用作关键字参数,而不能用作位置参数.然而,不适用于该print()函数,因为无论如何都要打印所有位置参数,并且永远不会将其误认为是关键字参数.


jfs*_*jfs 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
Run Code Online (Sandbox Code Playgroud)

另一个例子:

>>> 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
Run Code Online (Sandbox Code Playgroud)

  • 塞巴斯蒂安是对的,*之后的参数只能作为名称参数给出.这是Python 3中的一个新功能. (4认同)