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兼容?
答案 0 :(得分:3)
不,没有可用的Python 2的等效解包支持。
在某些情况下,您可以使用切片来逼近交叉比较代码:
first, second, rest = val[0], val[1], val[2:]
答案 1 :(得分:3)
没有。您可以在__future__
module documentation中看到Python 2.7支持的未来语句列表,并且这些未来语句都不会对此提供支持。
(请注意,__future__
模块实际上并未涉及未来语句执行的魔术。它主要用于文档目的,并避免混淆期望所有导入对应于实际模块的工具。)< / p>
答案 2 :(得分:3)
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)
会给出预期的行为