Python版本为2.7版解压缩

时间:2012-05-29 04:12:56

标签: python iterable-unpacking

如上所述here,你可以使用星号来解包未知数量的变量(比如在函数中),但只能在python 3中使用:

>>> a, *b = (1, 2, 3)
>>> b
[2, 3]
>>> a, *b = (1,)
>>> b
[]

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

c = (1, 2, 3)
a, b = c[0], c[1:] if len(c) > 1 else []

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

3 个答案:

答案 0 :(得分:31)

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

c = (1, 2, 3)
a, b = c[0], c[1:]

只要c至少有一个成员就可以使用,因为如果c中只有{1}} {1}} c[1:],那么{/ 1}}。

您应该确保[]中至少有一件事,否则c会引发异常。

您可以执行以下操作:

c[0]

答案 1 :(得分:2)

(a,b) = (None, []) if not len(c) else (c[0], c[1:])

也是处理c是空序列的情况的一个选项,尽管它不能区分[None]和[]作为a,b的赋值。所以小心使用它,try / except可能是最好的。

在处理空容器时,我发现Python 3和2.7之间没有真正的区别,但是Python 3的优点在于它适用于任何可迭代的。

如果你知道c是一个生成器,这在2.7中有效。

a,b = c.next(), c

但解压缩的全部优点似乎需要Python 3。

答案 2 :(得分:0)

ex13.py的答案

from sys import argv

script=argv

def Fun(arg1, *argv): 
    print "First argument :", script 

    for arg in argv: 
        print"Your variable is:", arg

Fun('scrpit', 'first', 'second', 'third')