3.python封装和解构,丢弃变量

封装和解构
1.封装
(1)将多个值使用逗号分割,组合在一起
(2)本质上,返回一个元祖,只是省掉了小括号
(3)python特有语法,被很多语言借鉴
举例:定义为元祖

>>> t1=(1,2)
>>> type(t1)
<class 'tuple'>

举例:将1和2封装成元祖

>>> t2=1,2
>>> type(t2)
<class 'tuple'>

2.封装和解构

>>> a=4
>>> b=5
#封装
>>> c=a,b
>>> c
(4, 5)
#解构
>>> b,a=c
>>> b
4
>>> a
5

3.解构
(1)线性结构的元素解开,并顺序的赋给气他变量
(2)左边接纳的变量数要和右边解开的元素个数一致
举例:把列表里的两个值解构

>>> list=[3,5]
>>> first,second = list
>>> print(first,second)
3 5

举例:把字典里的两个值解构

>>> a,b={'a':10,'b':20}
>>> a
'b'
>>> b
'a'

举例:

>>> a,*b={10,20,30}
>>> a
10
>>> b
[20, 30]

举例:

>>> [a,b]=10,20
>>> a
10
>>> b
20

举例:

>>> (a,b)={30,40}
>>> a
40
>>> b
30

4.python3的解构
(1)使用*变量名接收,但不能单独使用
(2)被*变量名收集后组成一个列表
举例:

>>> lst = list(range(1,51,2))
>>> lst
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49]

举例:a取第一位,b去第二到倒数第二位,c取最后一位

>>> a,*b,c=lst
>>> a
1
>>> b
[3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47]
>>> c
49

举例:*a尽可能的拿,b取最后一位

>>> *a,b=lst
>>> a
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47]
>>> b
49

举例:a取第一位,b取2到最后一位

>>> a,*b=lst
>>> a
1
>>> b
[3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49]

举例:a取第一位,b去第二到倒数第二位列表类型,c取最后一位

>>> a,*b,c="abcdefghijklmn"
>>> a
'a'
>>> b
['b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm']
>>> c
'n'
>>> type(b)
<class 'list'>

5.练习

对列表[1,9,8,5,6,7,4,3,2]使用冒泡法排序,要求使用封装和结构来交互数据
交换排序
lst=[1,9,8,5,6,7,4,3,2]
for i in range(9):                          #有几个数字循环几次,循环9次
    for j in range(8-i):                    #循环0-7
        if lst[j] > lst[j+1]:               #1>9
            #右边封装到左边依次解构
            lst[j],lst[j+1]=lst[j+1],lst[j]  #1,2=
print(lst)
返回:
[1, 2, 3, 4, 5, 6, 7, 8, 9]

丢弃变量
(1)这是一个惯例,是一个不成文的约定,不是标准
(2)如果不关心的一个变量,就可以定义改变量名字为_
(3)_是一个合法的标识符,也可以作为一个有效的变量使用,但是定义成下划线就是希望不要被使用,除非你明确的知道这个数据需要使用

>>> lst=[9,8,7,20]
>>> first,*second=lst
>>> a,*_,b=lst
>>> print(a)
9
>>> print(b)
20

总结:
_这个变量本身无任何意义,没有任何可读性,所以不是用来给人使用的
python中很多库,都是用这个变量,使用十分广泛,请不要在不明确的变量作用域的情况下,使用_导致和库中_冲突
练习1:lst=list(range(10))这样一个列表,取出第二个,第四个,倒数第二个

>>> lst=list(range(10))
>>> _,a,_,b,*_,c,_=lst
>>> a
1
>>> b
3
>>> c
8

练习2:从lst=[1,(2,3,4),5]中,提取4出来

>>> lst=[1,(2,3,4),5]
>>> _,[*_,a],_=lst
>>> a
4

练习3:环境变量JAVA_HOME=/USR/BIN,返回变量名和路径

>>> s='JAVA_HOME=/USR/BIN'
>>> name,*_,paht=s.split('=')
>>> name
'JAVA_HOME'
>>> path
'/USR/BIN'

 

posted on 2018-08-21 17:40  我不是西西  阅读(291)  评论(0编辑  收藏  举报