zoukankan      html  css  js  c++  java
  • 零基础学python-10.1 序列赋值高级应用

    赋值语句的基本操作在前面的章节已经说到过,现在我们来说说赋值到高级应用

    第一节说的是序列赋值

    >>> a= 1
    >>> b=2
    >>> c,d=a,b
    >>> c,d
    (1, 2)
    >>> [c,d]=[a,b]
    >>> c
    1
    >>> c,d
    (1, 2)
    >>> 

    上面是一个简单的序列分解赋值语句,注意:在第三行c,d=a,b其实是组成一个元组,右边的值依次赋值给左边的变量

    >>> a= 1
    >>> b=2
    >>> b,a=a,b
    >>> a
    2
    >>> b
    1
    >>> a,b
    (2, 1)
    >>> 
    上面的这种元组使用技巧是经常使用的

    而且,上面的技巧不单适合整个元组,而且还适合部分的赋值

    >>> (a,b,c)=(1,2,3)
    >>> a,b
    (1, 2)
    >>> b,c
    (2, 3)
    >>> a,b,c
    (1, 2, 3)
    >>> a
    1
    >>> 

    高级序列赋值语句模式

    我们可以使用=将两侧混合相匹配,不过右边元素的数目必须跟左边的一致

    >>> a,b,c,d='abcd'
    >>> a,b,c,d
    ('a', 'b', 'c', 'd')
    >>> a,b,c='abcd'
    Traceback (most recent call last):
      File "<pyshell#20>", line 1, in <module>
        a,b,c='abcd'
    ValueError: too many values to unpack (expected 3)
    >>> 

    >>> a,b,c=string[0],string[1],string[2]
    >>> a,b,c
    ('a', 'b', 'c')
    >>> a,b,c=list(string[:2])+[string[2:]]
    >>> a,b,c
    ('a', 'b', 'cd')
    >>> 

    >>> ((a,b),c)=('ab','cd')
    >>> a,b,c
    ('a', 'b', 'cd')
    >>> 

    序列扩展包

    在上面我们看到,左右两侧的数目必须一致,但是也是有其他办法打破这个的

    我们可以使用*来作为通配符,代表余下的数据项

    >>> a,*b='abcd'
    >>> a,b
    ('a', ['b', 'c', 'd'])
    >>> 
    上面的a只是代表第一项,余下的都赋值给b

    同理:

    >>> *a,b='abcd'
    >>> a,b
    (['a', 'b', 'c'], 'd')
    >>> 

    >>> *a,b,c='abcd'
    >>> a,b,c
    (['a', 'b'], 'c', 'd')
    >>> 
    这个序列扩展包对于所有序列类型都有效

    >>> a,*b=(1,2,3,4)
    >>> a,b
    (1, [2, 3, 4])
    >>> a,*b=[1,2,3,4]
    >>> a,b
    (1, [2, 3, 4])
    >>> 

    需要注意的是边界情况,出现这个情况,python自动给超出边界的项赋值空

    >>> a,b,c,d,*e=(1,2,3,4)
    >>> a,b,c,d,e
    (1, 2, 3, 4, [])
    >>> a,b,c,d,*e='abcd'
    >>> a,b,c,d,e
    ('a', 'b', 'c', 'd', [])
    >>> 

    还需要注意的是,*符号只能存在一个,而且只有一个变量是不能使用*
    >>> a,*b,*c,d,*e='abcd'
    SyntaxError: two starred expressions in assignment
    >>> a,b,c,d,e='abcd'
    Traceback (most recent call last):
      File "<pyshell#46>", line 1, in <module>
        a,b,c,d,e='abcd'
    ValueError: need more than 4 values to unpack
    >>> *a='abcd'
    SyntaxError: starred assignment target must be in a list or tuple
    >>> 


    如果一个变量需要加*,那么必须在变量后面加上逗号,代表后面也跟着一个空变量

    >>> *a,='abcd'
    >>> a
    ['a', 'b', 'c', 'd']
    >>> 

    就说到这里,谢谢大家

    ------------------------------------------------------------------

    点击跳转零基础学python-目录






    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    FILE
    基础知识const/typedef/函数指针/回调函数
    strchr
    ftell
    rewind
    fread
    poj 2309BST解题报告
    hdoj 4004The Frog's Games解题报告
    哈理工oj 1353LCM与数对解题报告
    poj 2453An Easy Problem解题报告
  • 原文地址:https://www.cnblogs.com/raylee2007/p/4774465.html
Copyright © 2011-2022 走看看