一、封装和解构
1.1 封装
- 将多个值使用逗号分割,组合在一起
- 本质上,返回一个元祖,只是省掉了小括号
- Python 特有语法,被很多语言学习和借鉴
t1 = (1,2) # 定义为元祖
t2 = 1,2 # 将 1 和 2 封装成元祖
print(type(t1))
print(type(t2))
1.2 举例
a = 4
b = 5
temp = a
a = b
b = temp
等价于
a, b = b, a
上句中,等号右边使用了封装,而左边使用了解构
二、解构
2.1 把线性结构的元素解开,并顺序的赋值给其它变量
2.2 左边接纳的变量数要和右边解开的元素个数一致
2.3 举例
# 示例一
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}
三、Python 3 的解构
3.1 使用 *变量名
接收,但不能单独使用
3.2 被 *变量名
收集后组成一个列表
3.3 举例
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)
四、丢弃变量
4.1 这是一个惯例,是一个不成文的约定,不是标准
4.2 如果不关心一个变量,就可以定义改变量的名字为 _
4.3 _
是一个合法的标识符,也可以作为一个有效的变量使用,但是定义成下划线就是希望不要被使用,除非你明确的知道这个数据需要使用
4.4 举例
- 示例一
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(_)
4.5 总结
-
_
这个变量本身无任何语义,没有任何可读性,所以不是用来给人使用的 - Python 中很多库,都使用这个变量,使用十分广泛。请不要在不明确变量作用域的情况下,使用
_
导致和库中_
冲突
4.6 练习
-
lst = list(range(10)) 这样一个列表,取出第二个,第四个,倒数第二个
-
从 lst = [1,(2,3,4),5] 中,提取 4 出来
-
环境变量 JAVA_HOME=/usr/bin,返回变量名和路径
-
对列表 [1,9,8,5,6,7,4,3,2] 使用冒泡法排序,要求使用封装和解构来交互数据