是否可以在 Python 2.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兼容?

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__模块实际上并不参与未来语句执行的魔术。它主要用于文档目的,并避免混淆期望所有导入都对应于真实模块的工具。

最新更新