生信程序员Python全栈工程师

59、封装和解构

2019-06-01  本文已影响2人  BeautifulSoulpy
去与世界连接;去工作,去社交,去创造,去与人打交道,去旅行,去折腾,去家庭之外获得足够的欢愉,去让更多的人听你说的话,
让你的声音,有更多的安身之所,去从他人他事他物上,获得丰盈的存在感,价值感;

如此一来,你就是一直在成长的人;

只有共同的成长,齐步前行,谁也不落后谁,谁也不输给谁,各自都有喝彩声,各自都有鲜花和荣耀,而方向又是相同的,这样的婚姻之路,才会尽可能的长久;

哪怕不长久,你也能继续有光芒,有选择的权力!      ———————易简读书
python封装与解构;python特有语法,被很多语言学习和借鉴;

1.将多个值使用逗号分割,组合在一起;
2.本质上,返回一个元祖,只是省略了小括号;
3.python特有的语法,被很多语言学习和借鉴;

1.封装
#封装的定义
a=1,2,23  #将右边的内容封装成元祖
type(a)    |    tuple

# python 封装默认使用元组tuple() 进行封装;元组空间占用小;
c=(1)     
type(c)     #int

c=(1,)   #元祖定义的方式;
type()

x,y=y,x ## 句中,等号右边是封装;左边就是使用了解构;
# 封装过程:先算等号右边,算完了;发现左边有多个值,再解构;拆开,依次对应;

2.解构:
1.把线性解构的元素解开,并顺序的付给其他变量;
2.左边接纳的变量数要和右边解开的元素个数一致;
3.非线性的解构也可以解构;(本质上来讲,但顺序是随机的)

# eg:
lst=[3,5]
first,second=lst  # 解构:两边的个数必须严格一致;
print(first,second)    |    3 5

总结:
封装:右边的值算好后封装在一起(默认为元组)
解构:右边的与左边的严格 一一对应 的过程;
3.线性结构(list tuple,str)、链表和非线性结构

1.链表(逻辑上是线性的,物理内存中的布局不是线性的,乱放的;但是,列表存贮解构是连续的,开辟的一段连续的内存空间)

x,y=list((2,3))
x,y #又进行了封装;

# 元组有序(可索引),不可变,小括号()表示,可以重复,只读(不能增删改)
## 对比 list:有序(可索引),可变,使用[]表示,元素可重复
### 字符串是不可变的,有序,使用引号(单双,单双三)
#### bytes是不可变的字节序列,bytearray是可变的字节序列
##### set叫集合,元素可变(元素需要可hash)、无序(无法索引,可以迭代)、不重复(去重??)
###### dict,k-v组合,可变,无序,key不能重复

a,b={'a':10,'b':20}
a,b    |      ('a', 'b')

a,*b={10,20,30}   #新玩法;   set集合属于非线性结构;
a,b ,type(b)      |    (10, [20, 30], list)

[a,b]=1,2    #先封装为一个tuple();
[a,b]=(1,2)  #解开了,对应上了;
a,b    |    (1, 2)

1. 非线性的不是按顺序对应的(假随机,有一定的规路);线性的是顺序排列的;
(a,b)={30,40}
a,b    |    (40, 30)

lst=list(range(1,11,2))
head,*mid,tail=lst
head,mid,tail      |      (1, [3, 5, 7], 9)

2. *xxx  ->list     *xxx的容器为列表结构;*xxx不能完全赋值列表(error);*会尽可能的吃;
*mid的 容器为列表结构;

lst=[1,2,3]
head,*mid,tail=lst   # *mid的 容器为列表结构;
mid         |        [2]

4. 丢弃变量(*-、-)

1._为一个合法标识符,也可以作为一个有效的变量使用,但是定义变量就是不希望再次被使用;

  1. Python中很多库,都是用这个变量,使用十分广泛;请不要在不明确变量作用域的情况下,导致和库中_冲突;
head, *-, tail  #记住*_   方便看懂源码;

lst=[9,8,7,20]
_,*_,tail=lst
print(_)      #变量的重复**赋值(解构)**
print(tail)
print(_)
----------------------------
[8, 7]
20
[8, 7]

练习
1:取出元素:列表中取出第二个,第四个,倒数第二个;

lst=list(range(10))
_,b,_,d,*_,s,_=lst
print(b,d,s)       |      1 3 8
--------------------------------

2:从lst=[1,(2,3,4),5]

lst=[1,(2,3,4),5]
_,(*_,val),_=lst   #线性结构一样姐可以提取出来;
_,[*_,val],_=lst  
print(val)    |    4

3.环境变量JAVA_HOME=/usr/bin,返回环境变量名称和路径;

str='JAVA_HOME=/usr/bin'
key,_,val=str.partition('=')
#单个字符和字符串的处理问题;
key,val          |          ('JAVA_HOME', '/usr/bin')

4.对list使用冒泡法排序,
#要求使用封装和解构来交互数据;


lst=[1,9,8,5,6,7,4,3,2]  
n=len(lst)
for j in range(n):
    for i in range(n-1-j):
        if lst[i]>lst[i+1]:
            #lst[i+1],lst[i]=lst[i],lst[i+1]
            lst[i+1],lst[i]=lst[i:i+2] #   使用封装和解构 交互数据;
            
print(lst)
------------------------------------
[1, 2, 3, 4, 5, 6, 7, 8, 9]


上一篇 下一篇

猜你喜欢

热点阅读