Python 3:打印函数中的星号
我们来看看,Python 3:打印函数中的星号,python,python-3.x,Python,Python 3.x,我们来看看, print([object, ...], *, sep=' ', end='\n', file=sys.stdout) 我们如何解释这个“*”? 通常星号(“*”)表示许多对象。但这对我来说是个谜。在两个逗号之间。。。我甚至不敢认为这可能是一个打字错误 这意味着以下参数仅为关键字,即不能作为位置参数提供,必须使用它们的名称,例如: >>> def f(*, a): pass ... >>> f(1) Traceback (most rece
print([object, ...], *, sep=' ', end='\n', file=sys.stdout)
我们如何解释这个“*”
?
通常星号(“*”)表示许多对象。但这对我来说是个谜。在两个逗号之间。。。我甚至不敢认为这可能是一个打字错误 这意味着以下参数仅为关键字,即不能作为位置参数提供,必须使用它们的名称,例如:
>>> 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 f(*,a):通过
...
>>>f(1)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:f()只接受0个位置参数(给定1个)
>>>f(a=1)
>>>#好的
另一个例子:
>>> 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
def g(*a,b):通过
...
>>>g(1)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:g()只需要关键字参数b
>>>g(1,2)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:g()只需要关键字参数b
>>>g(1,b=2)
>>>#好的
>>>g(1,2,b=3)
>>>#好的
这是文档中的一个错误,由某人将新的Python 3功能应用到不应该使用它的地方插入。自那以后,它已被修复(请参阅) 使用的文档中的函数签名是以psuedo形式语法形式给出的,但是添加
*
标记只有在使用实际python语法时才有意义。在这种情况下,签名的[对象,…],*
部分应列为*对象
更正后的版本现在为:
print(*对象,sep='',end='\\n',file=sys.stdout,flush=False)
截至目前,在线版本尚未更新,但;我会看看我们是否可以要求重新生成文档
需要明确的是:*
语法在Python3中是有效的,这意味着以下参数只能用作关键字参数,而不能用作位置参数。但是,这不适用于print()
函数,因为所有位置参数都将被打印,并且永远不会被误认为是关键字参数。否,这意味着文档生成错误;,*
是由doc工具错误引起的。@MartijnPieters:try:def(a,*,b):通过
并查看是否能够提供b
作为位置参数巴斯蒂安是正确的,a*后面的参数只能作为名称参数提供。这是Python 3中的一个新功能。@J.F.Sebastian:这也是一件很酷的事情,但不是OP所要求的。:-)@马丁·皮耶特斯:事实正好相反。你提到的bug是不相关的。Before/after文档描述了相同的内容(3.3flush
参数中的新内容除外):print()
接受零个或多个要打印的位置参数,以及使用默认值指定打印选项的仅关键字参数。星号*
仍然表示(除了将所有位置参数作为对象传递
)以下参数应使用其名称提供,即我的答案有效。对不起,请问,我在哪里可以看到错误已被修复?我为您提供了急性链接。错误仍在这里。至于命令行中的帮助,即帮助(打印),它的类型为:打印(值,…,sep='',end='\n',file=sys.stdout)。因此,我也不知道如何解释它。与“对象”相比,“值”意味着什么。那么两个逗号之间的“…”意味着什么。因此,不知何故,我不能完全理解这个函数。@Kifsif:是的,在线文档仍然需要重新生成。开发版本仍然包含不正确的文本。我将您链接到错误报告,其中h已标记为已修复,因为文档源已更新。我从错误报告中提取了更正的版本。两个逗号之间的…
是错误生成的方法签名的一部分。