Python 3.x允许在并行赋值中转储超额收益,其中*
>>> a, b, *args = range(4)
>>> a
0
>>> b
1
>>> args
[2, 3]
但 2.x 不会:
>>> a, b, *args = range(4)
File "<stdin>", line 1
a,b,*args = range(4)
^
SyntaxError: invalid syntax
是否有一些未来的导入可以使此语句与Python 2.x兼容?
AFAIK 这个功能在 Python 2 中不可用,如果你真的需要这样的东西——只需编写实用程序函数
def unpack(iterable, elements_count):
iterator = iter(iterable)
for _ in range(elements_count):
yield next(iterator)
# maybe use `list` or leave `iterator`-object
yield tuple(iterator)
然后
a, b, args = unpack(range(4), 2)
将给出预期的行为
不,没有对 Python 2 的等效解包支持。
在某些情况下,您可以使用切片来近似交叉兼容代码:
first, second, rest = val[0], val[1], val[2:]
No.您可以在__future__
模块文档中查看 Python 2.7 支持的未来语句列表,这些未来的语句都没有对此启用支持。
(请注意,__future__
模块实际上并不参与未来语句执行的魔术。它主要用于文档目的,并避免混淆期望所有导入都对应于真实模块的工具。