• 别样赋值


    #之前我们了解了很多赋值语句,在实际使用中,赋值语句还有很多特殊用法,
     
    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 #增量赋值可以让代码在很多情况下更易读,更容易理解。
  • 相关阅读:
    struts文件上传,获取文件名和文件类型
    commons-fileupload.jar实现文件上传
    DiskFileItemFactory类的使用
    css控制两个表格的边线重合
    css控制同一个页面的两个表格,一个显示有边框线,而另一个没边框线
    Android无线调试_adbWireless
    Android无线调试(转)
    struts2用到的jar有那些
    Eclipse 中 Could not find *.apk的解决方案
    JavaScript修改注册表
  • 原文地址:https://www.cnblogs.com/DLHe/p/7744317.html
Copyright © 2020-2023  润新知