• Python的封装和解构


    封装

    使用逗号将多个值组合在一起,返回一个元组,省略了小括号

    In [72]: tp1=(1,2)
    
    In [73]: type(tp1)
    Out[73]: tuple
    
    In [74]: tp2=1,2
    
    In [75]: type(tp2)
    Out[75]: tuple
    
    In [76]: tp2='ab',2,'c'
    
    In [77]: tp2
    Out[77]: ('ab', 2, 'c')
    In [78]: tp2=[1,2],'ab',2,'c'
    
    In [79]: tp2
    Out[79]: ([1, 2], 'ab', 2, 'c')

    解构

    将线性结构解开,顺序赋值给其他变量(左边接受赋值的变量数要和右边数据结构解开的元素数一致)

    In [80]: str1='abc','bcd'
    
    In [81]: sub1,sub2=str1
    
    In [82]: sub1
    Out[82]: 'abc'
    
    In [83]: sub2
    Out[83]: 'bcd'

    解构

    In [91]: a,b={1,2}
    
    In [92]: a
    Out[92]: 1
    
    In [93]: b
    Out[93]: 2
    
    In [94]: a,b={'a':10,'b':30}
    
    In [95]: a
    Out[95]: 'b'
    
    In [96]: b
    Out[96]: 'a'
    
    In [98]: a,b={1,2,3}
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    <ipython-input-98-14e2385ba548> in <module>
    ----> 1 a,b={1,2,3}
    
    ValueError: too many values to unpack (expected 2)
    
    In [106]: [a,b]=(1,2)
    
    In [107]: a
    Out[107]: 1
    
    In [108]: b
    Out[108]: 2
    
    In [109]: [a,b]=10,20
    
    In [110]: a
    Out[110]: 10
    
    In [111]: b
    Out[111]: 20
    
    In [112]: (a,b)={'a':10,'b':30}
    
    In [113]: a
    Out[113]: 'b'
    
    In [114]: b
    Out[114]: 'a'

    结构的本质

    下面的例子:(a,b)接受右边的值后组成的一个元组,但是没有变量被赋值(a,b)这个元组,ipython使用 _ 来接受被遗弃的变量

    In [121]: (a,b)=2,3
    
    In [122]: a,b
    Out[122]: (2, 3)
    
    In [123]: _
    Out[123]: (2, 3)

    组合使用封装和解构(bubble)

    In [84]: a = 1
    
    In [85]: b = 2
    
    In [86]: tmp =a
    
    In [87]: a = b
    
    In [88]: b = tmp
    
    In [89]: a
    Out[89]: 2
    
    In [90]: b
    Out[90]: 1
    
    与下面的表达式等价:
    
    a, b = b, a

    上面的语句中,等号左边使用了结构,右边使用封装

    Python3中的解构

    使用*VARIABLE 接收,*VARIABLE接收后组成一个列表

    In [1]: lst= list(range(10))
    
    In [2]: a,*mid,b = lst
    
    In [3]: a
    Out[3]: 0
    
    In [4]: b
    Out[4]: 9
    In [8]: *head, tail=lst
    
    In [9]: head
    Out[9]: [0, 1, 2, 3, 4, 5, 6, 7, 8]
    
    In [10]: head, *tail=lst
    
    In [11]: tail
    Out[11]: [1, 2, 3, 4, 5, 6, 7, 8, 9]

    不能给多个表达式

    In [15]: a,*var1,b,*var2,tail=lst
      File "<ipython-input-15-7b7f4a61b498>", line 4
    SyntaxError: two starred expressions in assignment

    切片练习

    从lst=[1,(3,4,5),10]中提取出5

    In [22]: _,[*_,tail],_=lst
    
    In [23]: tail
    Out[23]: 5
  • 相关阅读:
    LOJ6433 [PKUSC2018] 最大前缀和 【状压DP】
    [NOIP2017] 宝藏 【树形DP】【状压DP】
    51Nod1824 染色游戏 【Lucas定理】【FMT】【位运算】
    51Nod1778 小Q的集合 【组合数】【Lucas定理】
    LOJ6436 [PKUSC2018] 神仙的游戏 【FFT】
    LOJ6432 [PKUSC2018] 真实排名 【组合数】
    BZOJ5210 最大连通子块和 【树链剖分】【堆】【动态DP】
    LOJ2269 [SDOI2017] 切树游戏 【FWT】【动态DP】【树链剖分】【线段树】
    洛谷3707 [SDOI2017] 相关分析 【线段树】
    RBAC
  • 原文地址:https://www.cnblogs.com/zh-dream/p/13441589.html
Copyright © 2020-2023  润新知