Python的明星拆包2.7版本Python的明星拆包2.7版本(Python star unpac

2019-05-11 21:15发布

如前所述在这里 ,你可以使用星拆包未知数量的变量(如函数),但只在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?

Answer 1:

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

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

只要c具有至少一个构件,将工作,因为如果c只中有1个东西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


Answer 2:

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

也是用于处理,其中c是一个空的序列的情况下的选择,尽管它不会[无]和[]之间的术语指配到一个区分,B。 所以请小心,在尝试使用/,除了可能是最好的。

我可以看到的Python 3和2.7之间没有真正的区别处理一个空的容器时,但在这里,关于Python 3的好处是,它可以与任何迭代。

如果你知道c是发电机这部作品在2.7。

a,b = c.next(), c

但是拆包的充满美感似乎需要Python 3中。



Answer 3:

回答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')


文章来源: Python star unpacking for version 2.7