按照元素顺序,把线性结构的元素赋值给变量;
t = 1,2
t 是一个tuple;
定义一个元组,可以省略小括号();
t = (1,2) <==> t = 1,2
x = 1
y = 2
x,y = y,x
=右侧是封装,
然后再将封装出来的元组中的元素进行解构;
封装出来的一定是元组;
py3 特有:
In [9]: lst = list(range(1000))
In [10]: head,*mid,tail = lst # 加星号可以匹配其他所有元素;
In [11]: print(head,tail)
0 999
In [12]: type(mid)
Out[12]: list
In [13]: len(mid)
Out[13]: 998In [14]: lst = list(range(5))
In [15]: *lst2 = lst
File "<ipython-input-15-98211a44ccfb>", line 1
*lst2 = lst
^
SyntaxError: starred assignment target must be in a list or tuple # 此处是语法错误;
# 左边只有一个加星号的元素是不可以的;
# 左边有多余一个的加星号的元素也是不可以的;
# 左边的变量个数超过右边线性结构的元素个数也是不可以的;
In [16]: head,*mid,tail = lst
In [17]: # mid会将最后一个元素留给tail
In [18]: lst = [1,2]
In [19]: head,*mid,tail = lst # 没有元素的时候,加星号的变量不会争抢;
In [20]: head
Out[20]: 1
In [21]: mid
Out[21]: []
In [22]: tail
Out[22]: 2- 元素按照顺序赋值给变量;
- 变量和元素的个数必须匹配;
- 加星号的变量可以接收任意个数的元素;
- 加星号的变量不能单独出现;
- 加星号的变量也不能出现多余一次;
In [25]: lst
Out[25]: [0, 1, 2, 3, 4]
In [27]: head,*m1,*m2,tail = lst
File "<ipython-input-27-e411169d480b>", line 1
head,*m1,*m2,tail = lst
^
SyntaxError: two starred expressions in assignment # 解构过程中,不能出现两个带星号的变量,无法判断数量;python的一个使用惯例,使用单个下划线_,表示丢弃该变量;
单个下划线也是Python合法的标识符,但是如果不是要丢弃一个变量,通常不要用单个下划线来表示一个有意义的变量;
gettext,多语言,gettext('bbbb') 通常会重命名为_
ipython会把不是None的返回值临时保存在_中;
** 解构是支持多层的 **