Python系列教程(十九):封装和解构

   一、Python的封装  

    封装就是把多个值用‘,’号隔开,然后组合成1个元组,其实,封装的本质就是定义一个元组省略了‘()’而已

#等式右边就是一个封装,返回一个元组
>>>tuple1 = 3,5,'abc'
>>>type(tuple1)
tuple

>>>tuple1
(3, 5, 'abc')

  二、Python的解构  

    解构就是解开一个数据结构(线性和非线性都可以),然后把里面的元素顺序的赋给其他变量。解开后的元素个数要和变量的个数一致。也不是什么情况下都会解构,只有当一个数据结构需要赋值给多个变量的时候,才会触发解构

1、几种常见的解构方式

  线性结构(str,list,tuple)的解构 

#解线性结构
>>>a,b = '12'
>>>a,b = (1,2)
>>>a,b = [1,2]

>>>print(a,b)
1 2

  非线性结构(set,dict)的解构 

#解非线性结构:set
>>>a,b = {1,2}
>>>print(a,b)
1 2

#解非线性结构:dict,字典的解构其实是key拿出来了
>>>a,b = {2:'a',3:'b'}
>>>print(a,b)
2 3

  元素和变量个数不一致的解构 

>>>a,b = {10,20,30}
ValueError: too many values to unpack (expected 2)

  左右两边都发生的解构 

>>>[a,b] = (1,2)
>>>print(a,b)
1 2

2、使用‘*变量名’接收多个元素

    前面说到,如果有多少个元素,就得多少个变量去对应接收,我们还可以使用‘*变量名’的方式,一次性接收解构后的多个元素,但是*变量不能单独使用,*变量也不能出现多次,最后被*变量名接收的变量会组成一个列表

#元素的第一个和最后一个给了head和tail,剩下都给了min并且组成了列表
>>>list1 = range(1,5)
>>>head,*min,tail = list1
>>>print(head,tail,min)
1 4 [2, 3]

#元素的第一个给了head,其余都给了other并且组成了列表
>>>head,*other = list1
>>>print(head,other)
1 [2, 3, 4]

#*变量单独出现
>>>*name = list1
SyntaxError: starred assignment target must be in a list or tuple

#*变量出现了多次,它怎么知道元素该给哪个,所以直接报错
>>>head,*min1,*min2,tail = list1
SyntaxError: two starred expressions in assignment

3、使用丢弃变量接收元素

    一个下划线‘_’作为丢弃变量:所谓丢弃变量,意如其名,这个变量不会被使用,它只是作为接收一些无用数据暂时使用,当然这个只是一个约定俗称,并非强制性的标准,你要拿来使用也没有问题,但是既然用了‘_’这个没有参考意义的名称作为变量名,就是希望不被使用的。

#我这里不关心第一个和第三个元素,可以使用丢弃变量‘_’接收
>>>list3 = 'www.xjimmy.com'.split('.')
>>>_,domain,_ = list3
>>>domain
'xjimmy'

4、解构的应用

    ① 实现交换变量:这里先使用了封装,再解构

>>>a = 5
>>>b = 10

#先把b,a封装成元组(b,a),然后再解构,解构后将元素按顺序赋给a,b,最终实现交换
>>>a,b = b,a

>>>a
10
>>>b
5

    ② 提取元素:这里先右边解构list,然后再左边解构元组

#我们要提取元素3
>>>list4 = [1,(2,3,4),5]

>>>_,(a,b,c),_ = list4
>>>b
3

5、解构的总结

    ① 前面介绍的5种基础数据结构都可以解构。

    ② 解构不分左边右边,两边都可以解构。

    ③ 解构之后的元素还是一个数据结构,还可以继续解构。

    ④ 解构之后的元素个数要和普通变量个数保证一致。

    ⑤ 使用‘*变量名’接收数据的原则是,在保证普通变量能接收到元素的情况下,‘*变量名’尽可能的接收多个元素。

    ⑥ 如果解构后的元素不需要用的话,可以使用‘_’丢弃变量接收。

Jimmy's Blog ,版权所有丨如未注明,均为原创丨本网站采用BY-NC-SA协议进行授权,转载请注明转自:https://www.xjimmy.com/python-18-package_decon.html

Leave a Comment