Python之封装与解构

举例: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

你可能感兴趣的:(Python之封装与解构)