使用带打印的*(splat)运算符

时间:2015-04-07 23:40:29

标签: python python-2.7

我经常使用Python的print语句来显示数据。是的,我知道'%s %d' % ('abc', 123)方法,'{} {}'.format('abc', 123)方法和' '.join(('abc', str(123)))方法。我也知道splat运算符(*)可用于将迭代扩展为函数参数。但是,我似乎无法使用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后面的内容究竟是什么? documentation表示以逗号分隔的表达式列表遵循print关键字,但我猜这与列表数据类型不同。我在SO和网络上做了很多挖掘,并没有找到明确的解释。

我正在使用Python 2.7.6。

1 个答案:

答案 0 :(得分:12)

print是Python 2.x中的一个语句,不支持*语法。您可以从documentation中列出的print语法中看到这一点:

print_stmt ::=  "print" ([expression ("," expression)* [","]]
                | ">>" expression [("," expression)+ [","]])

请注意,*关键字后无法使用print


但是,函数调用中支持*语法 ,而print is a function in 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
>>>