Python的数据结构(五)封装和解构

1.封装和解构

1.1 封装

将多个用逗号 , 分隔开来的值,组合在一起,形成一个新的元组。

t = 1, 2
t
(1, 2)

1, 2, 3, 4 # in
(1, 2, 3, 4) # out

所以一般人在创建元组时都会简写,反正都会封装起来。

1.2 解构

解构就是,把一个list 、tuple 、set 等已经封装起来的类型打开,并且把里面的元素依次赋给标识符。

t = 1, 2, 3 # 这里把这三个元素封装成元组
n1, n2, n3 = t # 把右边元组解构,每个元素依次赋给左边的标识符

n1, n2, n3
(1, 2, 3) # 注意,这里直接用逗号, 连接起来,然后输出,相当于又做了一次封装

print(n1, n2, n3)
1, 2, 3

注意,解构开来的元素个数,必须与左边标识符的数量一致,少了不行,多了更不行。

[a, b] = list(range(2))
a, b
0, 1

左边看似只有一个类型为list 的元素,但是左边也是要解构的,解构之后把元素一一对应。

有一个特例

t = 1,2,3
t1 = t

这种叫赋值,把t 这个元组里面的1,2,3 解构,并且赋给了t1 。

眼熟不?这不就是赋值,赋值既定义,逗你玩呢。

1.3 解构的其他用法

有时候,解构出来的元素太多,但是我们想要最后一个,该怎么办呢?

*a, b = list(range(10))

b
9
a
[1, 2, 3, 4, 5, 6, 7, 8] # 被*标识符收集之后,会形成一个列表

如果在某个等待接受解构出来的元素的标识符,前面加上* 号,那么这个标识符就会尽可能的多接受元素。

不能同时出现两个* 号,如果有两个标识符都要尽可能的接受多的元素,会有冲突。

也不能用在单独出现的元素上,比如 *a = list(range(10)) 这样。只有一个元素了,没必要让他尽可能接受更多的元素,因为所有元素都是他的。因此这样是错误的,会报错的。

1.4 丢弃变量

在使用解构时,有的变量使我们不想要的,这种变量可以用_ 来表示,这个_ 取到的值变来变去,就不要了,而且来回用好多次,想要也要不了。

_ 没有具体的意思,所以才拿来当丢弃变量用。

lst = ['fuck','ur','asshole','hhhhh']
*_, a, _ = lst

a
'asshole'

1.5 嵌套解构

这个解构还可以这么用,不太会描述,直接看例子吧,我想只想要 ‘dick’ :

lst  = lst  = 'suck', ('my', 'his','her','their','dick'), 'hhhh'
_, (*_, a), _ = lst
a
'dick'
# 用列表[]括起来,也是可以的,暂时没发现区别

总之是可以把解构出来的复杂解构,再来解构一次,取出第二层里面的某个值。

注意,解第一层,只能出现一个*号的标识符,但是解第二层,可以再次出现*号标识符,这样是不冲突的。因为第一层的*号标识符,是不会进入第二层里,跟第二层的*号标识符抢元素的。

猜你喜欢

转载自blog.csdn.net/LittleHuang950620/article/details/81637912