举例:a和b交换赋值
a = 4 b = 5 temp = a a = b b = temp
等价于a, b = b, a
上句中,等号右边使用了封装,而左边就使用了解构
封装
右边封装,将多个值使用逗号分割,组合在一起,本质上,返回一个元组,只是省掉了小括号,是python特有语法,被很多语言学习和借鉴
注:在封装与结构过程中,右边的封装过程是先进行的
解构
把线性结构的元素解开,并顺序的赋给其它变量
左边接纳的变量数要和右边解开的元素个数一致
使用 *变量名 接收
但不能单独使用,被 变量名 收集后组成一个列表*
单独使用会报错:
也不能连续使用:
丢弃变量
这是一个惯例,是一个不成文的约定,不是标准:如果不关心一个变量,就可以定义改变量的名字为_。
_ 是一个合法的标识符,也可以作为一个有效的变量使用,但是定义成下划线就是希望不要被使用,除非你明确的知道这个数据需要使用
实例:
注:
_ 是合法的标识符,看到下划线就知道这个变量就是不想被使用
_ 还是一种特殊变量: _ 表示前一次输出; __ 表示倒数第二次输出; ___ 表示倒数第三次输出; _dh 目录历史; _oh 输出历史
总结:
_ 这个变量本身无任何语义,没有任何可读性,所以不是用来给人使用的Python中很多库,都使用这个变量,使用十分广泛。请不要在不明确变量作用域的情况下,使用 _ 导致和库中_ 冲突
练习:
1、从lst = [1,(2,3,4),5]中,提取4出来
lst = [1,(2,3,4),5]
_,(*_,a),_ = lst
print(a)
2、环境变量JAVA_HOME=/usr/bin
,返回环境变量名和路径
key, _ , val = "JAVA_HOME=/usr/bin".partition('=')
#字符串分割:partition(sep) -> (head, sep, tail)
print(key)
print(val)
#运行结果:
JAVA_HOME
/usr/bin
3、对列表[1, 9, 8, 5, 6, 7, 4, 3, 2]
使用冒泡法排序,要求使用封装和解构来交互数据
lst = [1, 9, 8, 5, 6, 7, 4, 3, 2]
for i in range(9):
for j in range(8):
if lst[j] > lst[j+1]:
lst[j],lst[j+1] = lst[j+1],lst[j]
print(lst)
#结果
[1, 2, 3, 4, 5, 6, 7, 8, 9]
4、 lst = list(range(10)) # 这样一个列表,取出第二个、第四个、倒数第二个
lst = list(range(10))
_,a,_,b,*_,c,_ = lst
print(a,b,c)
#结果
1 3 8