如上所述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中进行未知长度的解包?
答案 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)
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')