在Python 2.x中是否可以使用*来转换并行赋值中的多余返回?

时间:2017-04-10 18:13:54

标签: python python-3.x

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兼容?

3 个答案:

答案 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)

会给出预期的行为