介绍python中组包与拆包是如何操作,和实现的,及使用的注意事项。
1.组包:
1、组包: 通俗的讲,组包就是将多个数据装进一个包中。在python解释器中是将多个数据,或多组数据,装进一个元组,赋值给一个变量。如:a=1,2,3 python解释器将 = 右边的数据打包成元组赋值给a。
2、可以认为组包就定义了一个元组变量,我们知道定义元组的一个重要符号就是逗号","。所以如果把一个单独的数据赋值给变量不构成组包,例如a=3 ;它的整形,但是如果是a=3, (3后面加了逗号) 呢?看图例:
2.拆包(或解包):
1、拆包,是将一个序列类型的数据拆开为多个数据,分别赋值给变量,位置对应。如:a,b,c=('A','B','C'),python解释器会将其拆包为,a='A',b='B',c='C'。
2、如果序列的元素个数多于变量个数时:①可訇咀喃谆将非第一位的变量前加星号(*);②并且拆包的变量中只能有一个变量前可加星号(*);③这个星号表面它后边的变量是个列表。例如,a, *b=烫喇霰嘴(1,2,3,4) 拆包后的结果是:a=1,b=[2,3,4]从下图例中看出,变量b,容纳了除a对应元素外的所有元素。
3、如果有更多变量,且元素多于变量:①先将不加星号的变量按对应位置,将元素赋值给变量,②然后把剩余的元素以列表形式赋值给带星号的变量。
4、也有元素少于变量的拆包情况, 但元素个数不能少于非带星号的变量个数,这时,带星号的变量将返回一个空的列表:例如 a,b,*c=(1,2,),将被拆为:1,2,[ ]
5、上面的拆包例子均为元组类型,对于字符串,列表,字典等序列类型也是一样的操作。在这个过程中,星号实际上是起到了一个组包的作用。
6、注意有关*的一个问题:在上面例子中,在输出星号后面的变量为什么不加*呢?那是因为,如果给变量加了星号,是另外一拆包的过程。是这样的:①在拆包时的那个星已经在python解释器内自动使用了,进行了组包,得到了一个列表。②如果输出时再加个星号,python解释器自动对*后面的变量解包,是吧组包后的列表再次解包。此星号非彼星号。例如:x=[1,2,3],当我们输出:x的结果是[1,2,3];而输出 *x时的结果是1 2 3;
7、通过上边所述,在不知道多少个元素时,可以利用*来定义变量,所以我们在定义函数时,如果不确定有多少个实参时,就可以使用*来定义形参;例如:常常会看到这样的函数写法: func(*args)