我经常使用Python的print
语句来显示数据。是的,我知道有'%s %d' % ('abc', 123)
方法,'{} {}'.format('abc', 123)
方法和' '.join(('abc', str(123)))
方法。我也知道星号运算符(*
)可以用于将可迭代对象展开为函数参数。然而,我似乎无法在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和网上进行了大量挖掘,没有找到清晰的解释。我正在使用Python 2.7.6。
*
操作符会作为评估print
表达式的一部分而被应用,并且结果与print
兼容。换句话说,我希望*iterable
被print
解释为逗号分隔的表达式列表,其中每个表达式都是可迭代对象的一个元素。我猜这意味着这些表达式中的每一个都将被评估,这可能会导致代码注入或更糟的情况。也许这就是原因。 - Randall Cook*
语法实际上是 函数调用语法 的一部分;它不是一个独立的运算符。print
不支持它,只是因为语言设计者没有决定以这种方式进行修改。 最近有一个提议将*
语法扩展到 Python 的更多领域,但尚未实施。 - user2555451