Python版本为2.7版解压缩

bea*_*rdc 34 python iterable-unpacking

正如这里提到的,你可以使用star解压缩未知数量的变量(比如在函数中),但只能在python 3中:

>>> a, *b = (1, 2, 3)
>>> b
[2, 3]
>>> a, *b = (1,)
>>> b
[]
Run Code Online (Sandbox Code Playgroud)

在python 2.7中,我能想到的最好的是(并不可怕,但很烦人):

c = (1, 2, 3)
a, b = c[0], c[1:] if len(c) > 1 else []
Run Code Online (Sandbox Code Playgroud)

有没有办法从__future__像分区导入它,或者我需要自己的函数在python 2.7中进行未知长度的解包?

And*_*rew 31

在python 2.X中,你可以这样做:

c = (1, 2, 3)
a, b = c[0], c[1:]
Run Code Online (Sandbox Code Playgroud)

只要c至少有一个成员就可以工作,因为如果c只有一件事c[1:]就是[].

你可能应该确保至少有一件事c,否则c[0]会引发异常.

你可以这样做:

try:
    c = tuple(c)
    a, b = c[0], c[1:]
except TypeError, IndexError:
    # c is not iterable, or c is iterable, but it doesn't have any stuff in it.
    # do something else
    pass
Run Code Online (Sandbox Code Playgroud)

  • 只有`c`是一个序列.解压缩适用于任何迭代,因此对于完整的解决方案,首先执行`c = tuple(c).这完全模拟了行为,包括挂在无限的迭代上.但是你仍然需要更加努力地工作`a,*b,c = range(10)`; 但是没有真正的方法. (4认同)
  • @lvc man,'a,*b,c = range(10)`非常酷! (2认同)