python的封装与解构

Posted rivendare

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python的封装与解构相关的知识,希望对你有一定的参考价值。

封装

  • 将多个值使用逗号分割,组合在一起
  • 本质上,返回一个元祖,只是省掉了小括号
  • python特有语法,被很多语言学习和借鉴
t1 = (1,2) #定义为元祖
t2 = 1,2 #将1和2封装成元祖

print(type(t1))
print(type(t2))

返回类型都为元组:

<class tuple>
<class tuple>

 

使用方法:

a = 4
b = 5
temp = a
a = b
b = temp
# 等价于

a,b = b,a #等号右边使用了封装,左边使用了结构

使用示例,冒泡算法:

# 冒泡算法
list = [1,4,5,2,7,9,8,3,6]

for i in range(len(list)):
    flag = False
    for j in range(len(list)-1-i):
        if list[j] > list[j+1]:
            list[j],list[j+1] = list[j+1],list[j]
            flag = True
    if not flag:
        break
print(list)

 

解构

  • 把线性结构的元素解开,并顺序的赋给其他变量
  • 左边接纳的变量数要和右边解开的元素个数一致

示例:

list = [1,2]
a,b = list
print(a,b)

输出结果为:

1 2

 

结构方法示例:

a,b = 1,2                       |        1  2  
a,b = (1,2)                     | 输      1 2   
a,b = [1,2]                     |        1  2
a,b = [10,20]                   | 出      10 20
a,b = {10,20}                   |        10 20
a,b = {a:10,b:20}              |  结      a  b
a,b = {10,20,30}                 |        #解构接收与封装数量不一致 错误
a,*b = {10,20,30}                |  果      10 [20, 30]
[a,b] = (1,2)                   |        1  2
[a,b] = 10,20                  |  为      10  20
(a,b) ={30,40}                 |        30  40

 

python3的解构

  • 使用 *变量名 接收,但不能单独使用
  • 被 *变量名 手机后组成一个列表

示例1:

list = list(range(10))
a,*b,c = list
print(a,b,c)

输出结果为:

0 [1, 2, 3, 4, 5, 6, 7, 8] 9

示例2:

list = list(range(10))
*list2 = list
print(list2)

输出错误,不能单独使用*变量

    *list2 = list
    ^
SyntaxError: starred assignment target must be in a list or tuple

示例3:

list = list(range(10))
*a,b = list
print(a,b)

输出结果为:

[0, 1, 2, 3, 4, 5, 6, 7, 8] 9

示例4:

list = list(range(10))
a,*b = list
print(a,b)

输出结果为:

0 [1, 2, 3, 4, 5, 6, 7, 8, 9]

示例5:

list = list(range(10))
a,*b,*c,d = list
print(a,b,c,d)

输出结果错误,不能使用多个*变量

    a,*b,*c,d = list
    ^
SyntaxError: two starred expressions in assignment

示例6:

a,*b,c = "abcdefg"
print(b)

输出结果为:

[b, c, d, e, f]

 

丢弃变量

  • 这是一个惯例,是一个不成文的约定,不是标准
  • 如果不关心一个变量,就可以定义该变量的名字为_
  • _是一个合法的标识符,也可以作为一个有效的变量使用,但是定义为下划线就是希望不要被使用,除非明确知道这个数据需要使用
  • _这个变量本身无任何语义,没有任何可读性
  • python中很多库,都使用了这个变量,使用十分广泛,不要在不明确的作用域的情况下使用,导致冲突

示例1:

list = [9,8,7,20]
a,*b,c = list
x,*_,z = list
print(x,z)

输出结果为:

9 20

_是合法的标识符,看到下划线就知道这个变量就是不想被使用

示例2:

list = [2,1,3,5]
_,*_,a = list
print(_)
print(a)

输出结果为:

[1, 3]
5

 

复杂示例:

取出第二个,第四个,倒数第二个

list = list(range(10))
_,a,_,b,*_,c,_ = list
print(a,b,c)

从list = [1,(2,3,4),5]中取4出来

list = [1,(2,3,4),5]
_,(*_,a),_ = list
print(a)

环境变量JAVA_HOME=/usr/bin,返回变量名和路径

x = JAVA_HOME=/usr/bin
env,path = x.split(=,1)
print(env)
print(path)

以上输出结果为:

1 3 8
4
JAVA_HOME
/usr/bin

 





以上是关于python的封装与解构的主要内容,如果未能解决你的问题,请参考以下文章

Python封装及解构

python 函数参数及参数解构

封装解构,集合,字典,内建函数和简单选择排序相关知识及习题

8.字典dict和解构-封装

python内置函数封装解构

Python 第三课