Python 将*(splat)运算符用于打印
我经常使用Python的Python 将*(splat)运算符用于打印,python,python-2.7,Python,Python 2.7,我经常使用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]
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
>l=[1,2,3]
>>>l
[1, 2, 3]
>>>打印l
[1, 2, 3]
>>>“{}{}{}”。格式(*l)
'1 2 3'
>>>打印*l
文件“”,第1行
打印*l
^
SyntaxError:无效语法
使用元组:
>>> 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
>t=(4,5,6)
>>>t
(4, 5, 6)
>>>打印t
(4, 5, 6)
>>>“%d%d%d”%t
'4 5 6'
>>>“{}{}{}”。格式(*t)
'4 5 6'
>>>打印*t
文件“”,第1行
打印*t
^
SyntaxError:无效语法
我错过什么了吗?难道这根本不可能吗?接下来的打印内容是什么?表示表达式的逗号分隔列表跟随print
关键字,但我猜这与列表数据类型不同。我在网上做了大量的挖掘,没有找到一个明确的解释
我使用的是Python2.7.6。
print
是Python2.x中的一条语句,不支持*
语法。您可以从中列出的print
语法中看到这一点:
然后使用:
print(*l)
演示:
好的,看来这是语言定义不允许的。我希望我遗漏了一些东西,
*
操作符将作为计算print
表达式的一部分应用,并且结果将以某种方式与print
兼容。换句话说,我希望*iterable
将被print
解释为一个逗号分隔的表达式列表,其中每个表达式都是iterable的一个元素。我猜这意味着这些表达式中的每一个都会被计算,这可能导致代码注入,或者更糟。也许这就是原因。*
语法实际上是;它不是一个独立的操作员print
不支持它,因为语言设计者没有决定这样做。最近有人提议将*
语法扩展到Python的更多领域,但它尚未实现。这就进一步解释了问题。谢谢+1.
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
>>>