59、封装和解构

作者: BeautifulSoulpy | 来源:发表于2019-06-01 09:55 被阅读2次
    去与世界连接;去工作,去社交,去创造,去与人打交道,去旅行,去折腾,去家庭之外获得足够的欢愉,去让更多的人听你说的话,
    让你的声音,有更多的安身之所,去从他人他事他物上,获得丰盈的存在感,价值感;
    
    如此一来,你就是一直在成长的人;
    
    只有共同的成长,齐步前行,谁也不落后谁,谁也不输给谁,各自都有喝彩声,各自都有鲜花和荣耀,而方向又是相同的,这样的婚姻之路,才会尽可能的长久;
    
    哪怕不长久,你也能继续有光芒,有选择的权力!      ———————易简读书
    
    python封装与解构;python特有语法,被很多语言学习和借鉴;

    1.将多个值使用逗号分割,组合在一起;
    2.本质上,返回一个元祖,只是省略了小括号;
    3.python特有的语法,被很多语言学习和借鉴;

    1.封装
    #封装的定义
    a=1,2,23  #将右边的内容封装成元祖
    type(a)    |    tuple
    
    # python 封装默认使用元组tuple() 进行封装;元组空间占用小;
    c=(1)     
    type(c)     #int
    
    c=(1,)   #元祖定义的方式;
    type()
    
    x,y=y,x ## 句中,等号右边是封装;左边就是使用了解构;
    # 封装过程:先算等号右边,算完了;发现左边有多个值,再解构;拆开,依次对应;
    

    2.解构:
    1.把线性解构的元素解开,并顺序的付给其他变量;
    2.左边接纳的变量数要和右边解开的元素个数一致;
    3.非线性的解构也可以解构;(本质上来讲,但顺序是随机的)

    # eg:
    lst=[3,5]
    first,second=lst  # 解构:两边的个数必须严格一致;
    print(first,second)    |    3 5
    
    总结:
    封装:右边的值算好后封装在一起(默认为元组)
    解构:右边的与左边的严格 一一对应 的过程;
    
    3.线性结构(list tuple,str)、链表和非线性结构

    1.链表(逻辑上是线性的,物理内存中的布局不是线性的,乱放的;但是,列表存贮解构是连续的,开辟的一段连续的内存空间)

    x,y=list((2,3))
    x,y #又进行了封装;

    # 元组有序(可索引),不可变,小括号()表示,可以重复,只读(不能增删改)
    ## 对比 list:有序(可索引),可变,使用[]表示,元素可重复
    ### 字符串是不可变的,有序,使用引号(单双,单双三)
    #### bytes是不可变的字节序列,bytearray是可变的字节序列
    ##### set叫集合,元素可变(元素需要可hash)、无序(无法索引,可以迭代)、不重复(去重??)
    ###### dict,k-v组合,可变,无序,key不能重复
    
    a,b={'a':10,'b':20}
    a,b    |      ('a', 'b')
    
    a,*b={10,20,30}   #新玩法;   set集合属于非线性结构;
    a,b ,type(b)      |    (10, [20, 30], list)
    
    [a,b]=1,2    #先封装为一个tuple();
    [a,b]=(1,2)  #解开了,对应上了;
    a,b    |    (1, 2)
    
    1. 非线性的不是按顺序对应的(假随机,有一定的规路);线性的是顺序排列的;
    (a,b)={30,40}
    a,b    |    (40, 30)
    
    lst=list(range(1,11,2))
    head,*mid,tail=lst
    head,mid,tail      |      (1, [3, 5, 7], 9)
    
    2. *xxx  ->list     *xxx的容器为列表结构;*xxx不能完全赋值列表(error);*会尽可能的吃;
    *mid的 容器为列表结构;
    
    lst=[1,2,3]
    head,*mid,tail=lst   # *mid的 容器为列表结构;
    mid         |        [2]
    
    
    4. 丢弃变量(*-、-)

    1._为一个合法标识符,也可以作为一个有效的变量使用,但是定义变量就是不希望再次被使用;

    1. Python中很多库,都是用这个变量,使用十分广泛;请不要在不明确变量作用域的情况下,导致和库中_冲突;
    head, *-, tail  #记住*_   方便看懂源码;
    
    lst=[9,8,7,20]
    _,*_,tail=lst
    print(_)      #变量的重复**赋值(解构)**
    print(tail)
    print(_)
    ----------------------------
    [8, 7]
    20
    [8, 7]
    
    练习
    1:取出元素:列表中取出第二个,第四个,倒数第二个;
    
    lst=list(range(10))
    _,b,_,d,*_,s,_=lst
    print(b,d,s)       |      1 3 8
    --------------------------------
    
    2:从lst=[1,(2,3,4),5]
    
    lst=[1,(2,3,4),5]
    _,(*_,val),_=lst   #线性结构一样姐可以提取出来;
    _,[*_,val],_=lst  
    print(val)    |    4
    
    3.环境变量JAVA_HOME=/usr/bin,返回环境变量名称和路径;
    
    str='JAVA_HOME=/usr/bin'
    key,_,val=str.partition('=')
    #单个字符和字符串的处理问题;
    key,val          |          ('JAVA_HOME', '/usr/bin')
    
    4.对list使用冒泡法排序,
    #要求使用封装和解构来交互数据;
    
    
    lst=[1,9,8,5,6,7,4,3,2]  
    n=len(lst)
    for j in range(n):
        for i in range(n-1-j):
            if lst[i]>lst[i+1]:
                #lst[i+1],lst[i]=lst[i],lst[i+1]
                lst[i+1],lst[i]=lst[i:i+2] #   使用封装和解构 交互数据;
                
    print(lst)
    ------------------------------------
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    
    

    相关文章

      网友评论

        本文标题:59、封装和解构

        本文链接:https://www.haomeiwen.com/subject/nkkotctx.html