python数据结构-封装解构
封装和解构
封装:
封装: 将多个值使用逗号分隔,组合在一起 本质上,返回一个元组,只是省掉了小括号 python特有语法,被很多语言借用 举例: t1 = (1,2) #定义为元组 t2 = 1,2 #将1喝2封装成元组 type(t1) #类型为元组 type(t2) #类型为元组
解构:
解构: 把线性解构的元素解开,并顺序的赋给其它变量(非线性解构的也可以解构) 左边接纳的变量数要和右边解开的元素个数一致 举例: lst = [3,5] first second = lst print(first,second) #结果为3,5
封装解构举例
封装解构举例: a = 4 b = 5 temp = a a = b b = temp 等价于 a , b = b ,a #等号右边使用了封装,左边使用了解构
python3的解构
python3的解构: 使用*变量名接收,但不能单独使用 被*变量名收集后组成一个列表 列如: lst = list(range(1,101,2)) head,*mind,tail = lst *body,tail = lst head,*tail = lst head,*mid,tail = 'dassssssssdasda' type(mid)
丢弃变量
丢弃变量: 这是一个惯例,是一个不成文的规定,不是标准 如果不关心一个变量,就可以定义改变量的名字为 : '_' '_' 是一个合法的标识符,也可以作为一个有效的变量使用,但是定义成下划线就是希望不要使用,除非你明确的知道这个数据需要使用 '_'是合法标识符,看到下划线就知道这个变量就是不想被使用 列如: lst = [9,8,7,20] first,*second =lst head,*second = lst head,*_,tail = lst print(head) print(tail) 总结: ‘_’:这个变量本身无任何语义,没有任何可读性,所有不是用来给人使用的 python中很多库,都使用这个变量,使用十分广泛,请不要在不明确变量作用域的情况下,使用'_'导致和库中的'_'冲突
练习
练习: 从lst = [1,(2,3,4),5]中,提取4出来 _,(*_,f),_ = lst print(f) #结果为4 环境变量JAVA_HOME=/usr/bin,返回变量名和路径 str1 = 'JAVA_HOME=/usr/bin' name,path = str1,split('=') 对列表[1,9,8,5,6,7,4,3,2]使用冒泡算法排序,要求使用封装解构来交互数据 lst1 = [1,9,8,5,6,7,4,3,2] len1 = len(lst1) for i in range(len1): flag = False for j in range(len1-i-1): if lst1[j] > lst1[j+1]: lst1[j],lst1[j+1] = lst1[j+1],lst1[j] flag = True if not flag: break print(lst1) 总结:解构是python提供的很好的功能,可以方便提取复杂数据结构的值,配合'_'使用会更加便利
一定是先封装在解构,封装优先元组,解构优先列表,*b ,*表示无数个