封装和解构
- 封装
- 将多个值,使用逗号分割,组合在一起
- 本质上,返回一个元组,只是省掉了小括号
- python特有语法,被很多语言学习和借鉴 # 例如ES6
- t1=(1,2) # 定义为元组
- t2=1,2 # 将1和2封装成为元组
- type(t1)
- type(t2)
元组比列表要简单,在内存上比列表轻巧,所以封列表
- 举例
a = 4
b = 5
temp = a
a = b
b = temp
a,b=b,a
# 上面语句当中,等号右边使用了封装,而左边就使用了解构
解构
-
把线性结构的元素解开,并顺序的赋给其他变量
-
左边接纳的变量数量,要和右边解开的元素个数一致
-
举例
- lst=[3,5]
- first,second=lst
- print(first,second)
-
举例
a,b=1,2
a,b=(1,2)
a,b=[1,2]
a,b=[10.20]
a,b={10.20}
a,b=('a':10,'b':20) # 非线性结构也可以解构
a,b={10,20,30}
a,*b={10,20,30}
[a,b]=(1,2)
[a,b]=10,20
(a,b)={30,40}
python3解构
- 使用
*变量名
接收,但不能单独使用 - 被
*变量名
收集后组成一个列表 - 举例
- lst=list(range(1,101,2))
- head,*mid,tail=lst
- *lst2 = lst
- *body,tail=lst
- head,*tail=lst
head,*m1,*m2,tail=lst
head,*mid,tail
=*abcdefghijklmn- type(mid)
丢弃变量
- 这是一个惯例,是一个不成文的约定,不是标准
- 如果不关心一个变量,就可以定义该变量的名字为
_
_
是一个合法的标识符,也可以作为一个有效的变量使用。- 但是定义成下划线就是希望不要被使用,除非你明确的知道这个数据需要使用
- 举例
lst=[9,8,7,20]
first,*second=lst
head,*_,tail=lst
- print(head)
- print(tail)
#_
是合法的标识符,看到下划线就知道这个变量就是不想被使用print(_)
lst=[9,8,7,20]
first,*second=lst
_,*_,tail=lst
print(_)
print(tail)
print(_)
- 总结
_
这个变量本身没有任何语义,没有任何可读性,所以不是用来给人使用的。- python当中的很多库,都使用这个变量,使用十分广泛,
- 请不要在不明确变量作用域的情况下,使
_
导致和库当中的_
冲突
- 练习
- lst=list(range(10)) # 这样的一个列表,取出来第二个、第四个、倒数第二个
练习
- 从
lst=[1,(2,3,4),5]
中,提取4出来 - 环境变量
JAVA_HOME=/usr/bin
,返回变量名和路径 - 对列表
[1,9,8,5,6,7,4,3,2]
使用冒泡法排序,要求使用封装和结构来交互数据
lst=[1,(2,3,4),5]
a,(b,c,d),e=lst
print(a,b,c,d,e)
_,(*_,val),*_=lst
print(val)
_,[*_,val],*_=lst
print(val)
key,_,val='JAVA_HOME=/usr/bin'.partition('=')
print(key)
print(val)
- 总结
- 解构,是python提供的很好的功能,可以方便的提取复杂数据结构的值
- 配合
_
的使用,会更加便利!