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