Python-封装与解构

1、封装:

  定义:

    将多个值用括号分割,组合在一起

    本质上,返回一个元组,只是省掉了小括号   

1 In [99]: t = 1,2,3 # 封装成元组! t = (1,2,3)
2 
3 In [100]: t
4 Out[100]: (1, 2, 3)
1 a = 4
2 b = 5
3 tmp = a
4 a = b
5 b = tmp
6 等价于
7 a, b = b, a
8 
9 注:但并不是真正的等价,这里右侧是一个封装的元组,对左侧使用了解构

 

 

 

2、解构:

  把线性结构的元素解开,并顺序的赋值给其他变量(事实上集合对象也可以)非线性解构也能解构:set()

  左边接纳的变量数要和 右边解开的元素个数一致  

 1 In [12]: a,b,c,d = (1,2,3,4) # 解构
 2 
 3     In [13]: a,b,c,d #封装
 4     Out[13]: (1, 2, 3, 4)
 5 
 6 
 7         非线性解构也能解构:set()
 8 
 9     In [22]: a,b,*c,tail,end= set(range(10))
10     In [28]: a,b,*c= set(range(10))
11 
12 
13     In [22]: a,b,*c,tail,end= set(range(10))# 尽量将多的元素赋值给 *c
14     In [23]: c
15     Out[23]: [2, 3, 4, 5, 6, 7] # 列表
16 
17     In [24]: a
18     Out[24]: 0
19 
20     In [25]: b
21     Out[25]: 1
22 
23     In [26]: tail
24     Out[26]: 8
25 
26     In [27]: end
27     Out[27]: 9
28 
29  
30     In [30]: *c,a= set(range(10))  # *c不能单独存在 *c = set(range(10))
31 
32     In [31]: c
33     Out[31]: [0, 1, 2, 3, 4, 5, 6, 7, 8]
34 
35     In [32]:
36 
37     In [32]: a
38     Out[32]: 9
39 
40     In [34]: [a,b] = (2,3) # 最好两侧要一致的数据结构

      In [102]: a
      Out[102]: 2

      In [103]: b
      Out[103]: 3

 

 

解构字典,只留key

 

3、丢弃变量:

  这是一个管理,是一个不成文的约定,不是标准

  如果不关心一个变量,就可以定义改变量的名字为 _   (下划线)

  _ 是一个合法的标识符,也可以作为一个有效的变量使用,但是定义成下划线就是希望不要被使用,除非你明确的知道这个数据需要使用

    注:但是利用上一次的结果 _  的下划线,只能在IPython中使用

 1 In [105]: ls = [9,8,7,5]
 2 
 3 In [106]: first,*second = ls
 4 
 5 In [107]: head,*_,tail = ls
 6 
 7 In [108]: print(head)
 8 9
 9 
10 In [109]: print(tail)
11 5
12 
13 In [110]: print(_)
14 [8, 7]

 

 1 In [111]: ls
 2 Out[111]: [9, 8, 7, 5]
 3 
 4 In [112]: _,*_,tail = ls #后面的_ 覆盖了前面的_
 5 
 6 In [113]: print(_)
 7 [8, 7]
 8 
 9 In [114]: print(tail)
10 5
11 
12 In [115]: print(_)
13 [8, 7]

 

  总结:

    _ 这个变量本身无任何语义。没有任何可读性,所以不是用来给人使用的

    Python中很多库,搜使用这个变量,使用广泛。请不要在不明确变量作用域 的情况下,使用_ 导致和库中 _ 冲突。

1 取出[1,(2,3,4),5]的4
2 
3 In [117]: _,(_,_,c),_ = [1,(2,3,4),5]
4 
5 In [118]: c
6 Out[118]: 4

 

 1 冒泡法中的封装、解构
 2 
 3 l = [1,9,8,7,6,4,3,2]
 4 
 5 for i in range(len(l)):
 6     flag = False
 7     for j in range(len(l)-i -1):
 8         if l[j] > l[j+1]:
 9             l[j],l[j+1] = l[j+1],l[j]
10             flag = True
11     if not flag:
12         break
13 print(l)

 

1 提取'java_home=/usr/bin' 中的环境变量名和路径
2 
3 s = 'java_home=/usr/bin=/a/c/v'
4 
5 env,_,path=s.partition('=') # 最好使用partition 如果后面还有等号,用split()必须指定次数
6 
7 path

 

posted @ 2018-08-13 22:56  JerryZao  阅读(260)  评论(0编辑  收藏  举报