在打印中使用*(splat)运算符
我经常使用Python的print
语句来显示数据。是的,我知道'%s %d' % ('abc', 123)
方法,'{}
{}'.format('abc', 123)
方法和' '.join(('abc',
str(123)))
方法。我也知道splat运算符(*
)可用于将Iterable扩展为函数参数。但是,我似乎无法通过print
声明来做到这一点。使用清单:
>>> l = [1, 2, 3]
>>> l
[1, 2, 3]
>>> print l
[1, 2, 3]
>>> '{} {} {}'.format(*l)
'1 2 3'
>>> print *l
File "<stdin>", line 1
print *l
^
SyntaxError: invalid syntax
使用元组:
>>> t = (4, 5, 6)
>>> t
(4, 5, 6)
>>> print t
(4, 5, 6)
>>> '%d %d %d' % t
'4 5 6'
>>> '{} {} {}'.format(*t)
'4 5 6'
>>> print *t
File "<stdin>", line 1
print *t
^
SyntaxError: invalid syntax
我想念什么吗?这根本不可能吗?接下来到底是什么print
?该文档说该print
关键字后面是逗号分隔的表达式列表,但是我想这与列表数据类型不同。我在SO和Web上做了很多挖掘工作,却没有找到明确的解释。
我正在使用Python 2.7.6。
-
print
是Python
2.x中的语句,不支持*
语法。您可以从文档中print
列出的语法中看到这一点:print_stmt :: =“ print”([expression(“,” expression)* [“,”]] | “ >>”表达式[(“,”表达式)+ [“,”]])
请注意
*
,print
关键字之后如何没有使用选项。
然而,
*
语法 是 支持内部函数调用,它只是恰巧print
是在Python
3.X的功能。这意味着您可以从导入__future__
:from __future__ import print_function
然后使用:
print(*l)
演示:
>>> # Python 2.x interpreter >>> from __future__ import print_function >>> l = [1, 2, 3] >>> print(*l) 1 2 3 >>>