zoukankan      html  css  js  c++  java
  • 别样赋值

    #之前我们了解了很多赋值语句,在实际使用中,赋值语句还有很多特殊用法,
     
    1、序列解包
     1 #前面已经有不少赋值语句的示例,比如变量和数据结构成员的赋值,不过赋值的方法不止这些,例如:
     2 >>> x,y,z=1,2,3
     3 >>> print(x,y,z)
     4 1 2 3
     5 #由输出结果看到,可以多个赋值操作同时进行,后面在遇到对多个变量赋值时,就不需要对一个变量赋完值再对另一个变量赋值了,用一条语句即可,例如:
     6 >>> x,y,z=1,2,3
     7 >>> x,y=y,x
     8 >>> print(x,y,z)
     9 2 1 3
    10 #由输出结果看到,x和y的值交换了,所以可以交换两个或多个变量的值。
    11 #在Python中,交换所做的事情是叫作序列解包(sequence unpacking)或可选迭代解包,即将多个值的序列解开,然后放到变量序列中,可以通过下面的示例理解:
    12 >>> nums=1,2,3
    13 >>> x,y,z=nums
    14 >>> x            #获得序列解开的值
    15 1
    16 >>> print(x,y,z)  
    17 1 2 3
    18 #由输出结果看到,序列解包后,变量获得了对应的值。
    19 #再看一个示例:
    20 >>> student={'name':'小智','number':'1001'}
    21 >>> key,value=student.popitem()
    22 >>> key
    23 'name'
    24 >>> value
    25 '小智'
    26 #由输出结果可知,此处用于元组,使用popitem方法将键-值作为元组返回,返回的元组可以直接赋值到两个变量中。
    27 #序列解包允许函数返回一个以上的值并打包成元组,然后通过一个赋值语句进行访问。这里有一点需要注意,解包序列中的元素数量必须和放置在赋值符号”=“左边的数量完全一致,否则Python会在赋值时引发异常,例如:
    28 >>> x,y,z=1,2,3
    29 >>> x,y,z
    30 (1, 2, 3)
    31 >>> x,y,z=1,2
    32 Traceback (most recent call last):
    33   File "<pyshell#70>", line 1, in <module>
    34     x,y,z=1,2
    35 ValueError: not enough values to unpack (expected 3, got 2)
    36 >>> x,y,z=1,2,3,4
    37 Traceback (most recent call last):
    38   File "<pyshell#71>", line 1, in <module>
    39     x,y,z=1,2,3,4
    40 ValueError: too many values to unpack (expected 3)
    41 #由输出结果看到,当右边元素数量和左边的变量数量不一致时,执行结果就会报错,错误原因时没有足够的值解包(左边变量多余右边元素)或多个值未解包(左边变量少于右边元素)。
    42 #谨记在操作序列解包时,要注意保证左右和右边数量的相等。
    2、链式赋值
     1 #前面介绍了序列解包,序列解包在对不同变量赋值不同的值时非常有用,赋相同的值时用序列解包也可以实现。也还可以用其他方法,如链式赋值(Chained Assignment),例如:
     2 >>> x=y=z=10
     3 >>> x
     4 10
     5 #由输出结果可知,可以通过多个等式为多个变量赋同一个值,这种方法叫作链式赋值。
     6 #链式赋值是将同一值赋给多个值。
     7 #上面的语句效果和下面的语句效果一样:
     8 >>> x=10
     9 >>> y=x
    10 >>> y
    11 10
    12 #由输出结果看到,既可以使用链式方式赋值,也可以单独赋值,显然链式方式更简洁。
    3、增量赋值
     1 #我们在前面了解了赋值运算符,使用赋值运算符时没有将表达式写成类似x=x+1的形式,而是将表达式放置在赋值运算符(=)的左边(如将x=x+1写成x+=1),这种写法在Python中叫作增量赋值(Augemented Assignment)。这种写法对*(乘)、/(除)、%(取模)等标运算符都适用,例如:
     2 >>> x=5
     3 >>> x+=1    #
     4 >>> x
     5 6
     6 >>> x-=2   #
     7 >>> x
     8 4
     9 >>> x*=2   #
    10 >>> x
    11 8
    12 >>> x/=2   #
    13 >>> x
    14 4.0
    15 #由操作结果看到,使用增加赋值相对赋值操作看上去更简洁。
    16 #增量赋值除了适用于数值类型,还适用于二元运算符的数据类型,例如:
    17 >>> target='Hello'
    18 >>> target+='world'
    19 >>> target
    20 'Helloworld'
    21 >>> target*=2
    22 >>> target
    23 'HelloworldHelloworld'
    24 #由操作结果可知,增量赋值操作也可以用于字符串。
    25 #增量赋值可以让代码在很多情况下更易读,更容易理解。
  • 相关阅读:
    Encryption (hard) CodeForces
    cf 1163D Mysterious Code (字符串, dp)
    AC日记——大整数的因子 openjudge 1.6 13
    AC日记——计算2的N次方 openjudge 1.6 12
    Ac日记——大整数减法 openjudge 1.6 11
    AC日记——大整数加法 openjudge 1.6 10
    AC日记——组合数问题 落谷 P2822 noip2016day2T1
    AC日记——向量点积计算 openjudge 1.6 09
    AC日记——石头剪刀布 openjudge 1.6 08
    AC日记——有趣的跳跃 openjudge 1.6 07
  • 原文地址:https://www.cnblogs.com/DLHe/p/7744317.html
Copyright © 2011-2022 走看看