python封装和解构
封装
- 将多个值使用逗号分割,组合在一起
- 本质上,返回一个元组,只是省略了小括号
- python的特有的语法,被很多语言学习借鉴
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} #set的封装解构a,b = {'a':10,'b':20} # 非线性结构也可以解构 a,b = {10,20,30}a,*b = {10,20,30} #*b 可以接受剩下的所有值,并生产个列表[a,b] = (1,2) [a,b] = 10,20(a,b) = {30,40}
- 使用*变量名接收,但不能单独使用
- 被*变量名 收集后组成一个列表
举例:
lst = list(range(1, 21, 2)) head, *mid, tail = lst #执行结果1 [3, 5, 7, 9, 11, 13, 15, 17] 19 *lst2 = lst #不能单独使用 *body, tail = lst #执行结果 [1, 3, 5, 7, 9, 11, 13, 15, 17] 19 head, *tail = lst #执行结果 1 [3, 5, 7, 9, 11, 13, 15, 17, 19] head, *m1, *m2, tail = lst #只能有一个*变量名 head, *mid, tail = "abcdefghijklmn" #执行结果 a ['b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'] n type(mid) #mid 类型是列表 list
丢弃变量
- 这是一个惯例,是一个不成文的规定,不是标准
- 如果不关心一个变量,就可以定义变量的名字为_
- _是一个合法的标识符,也可以作为一个有效的变量使用,但是定义成下划线就是希望不要被使用,除非你明确的知道这个数据需要使用
举例:
lst = [9,8,7,20] first, *second = lst head, *_, tail = lst print(head) print(tail)
#_是合法的标识符,看到下划线就知道这个变量就是不想被使用
print(_)
总结
- _这个变量本身无任何语义,没有任何可读性,所以不是用来给人用的
- Python中很多库,都使用这个变量,使用十分广泛,请不要在不明确变量作用域的情况下使用_导致和库中的冲突
练习
1、从lst = [1,(2,3,4),5]中,提取4出来
lst = [1,(2,3,4),5] _,(*_,val),*_ = lst print(val)
2、环境变量JAVA_HOME=/usr/bin,返回变量名和路径
key,_,val = "JAVA_HOME=/usr/bin".partition("=") print(key,val)
碎片化时间学习和你一起终身学习