Skip to content

Latest commit

 

History

History
107 lines (67 loc) · 2.33 KB

File metadata and controls

107 lines (67 loc) · 2.33 KB

解构:

按照元素顺序,把线性结构的元素赋值给变量;

封装:

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]: 998
In [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的返回值临时保存在_中;

** 解构是支持多层的 **