zoukankan      html  css  js  c++  java
  • 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
    为什么要坚持,想一想当初!
  • 相关阅读:
    XSD文件生成C#VO实体类
    WPF根据Oracle数据库的表,生成CS文件小工具
    【求助】WPF 在XP下 有的Textbox光标会消失
    【转】oracle中in和exists的区别
    Spire.DOC生成表格测试
    【转】C#调用Windows图片和传真查看器打开图片
    WPF MVVM下做发送短信小按钮
    SignalR Progress
    C# readonly
    Settings.settings
  • 原文地址:https://www.cnblogs.com/JerryZao/p/9471605.html
Copyright © 2011-2022 走看看