zoukankan      html  css  js  c++  java
  • Python赋值魔法技巧

    实验环境:

    [root@localhost ~]# python -V
    Python 2.7.5
    

      

    1.序列解包

      多个赋值操作可以同时进行

    >>> x,y,z = 1,2,3
    >>> x
    1
    >>> print y,z
    2 3
    

       交换两个或者多个变量也是可以的

    >>> x,y = y,x
    >>> print x,y,z
    2 1 3
    

       这里所做的事叫做序列解包或者递归解包--将多个值的序列解开,然后放到变量的序列中。更形象的表示:

    >>> values = 1,2,3
    >>> values
    (1, 2, 3)
    >>> x,y,z = values
    >>> print x,y,z
    1 2 3
    

        当函数或者方法返回元组(或者其他序列或者可迭代对象)时,这个特性显得更为有用。假设需要获取(和删除)字典中任意的键-值对,可以使用popitem方法,这个方法将键-值对作为元组返回。那么这个元组就可以直接赋值到两个变量中。

    >>> addresslist = {'Wang':'123456','Ni':'23456'}
    >>> key,value = addresslist.popitem()
    >>> key
    'Ni'
    >>> value
    '23456'
    

       序列解包允许函数返回一个以上的值并且打包成元组,然后通过一个赋值语句很容易进行访问。所以解包的序列中的元素数量必须和放置在赋值符号=左边的变量数量完全一致。否则Python在赋值的时候就会引发异常。

    >>> x,y,z = 1,2
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: need more than 2 values to unpack
    >>> x,y,z = 1,2,3,4
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: too many values to unpack
    

    2.链式赋值

    链式赋值是将同一个赋值给多个变量的捷径。有点像上面的并行赋值,不过只处理一个值

    >>> x=y=[1,2,3]
    >>> print x,y
    [1, 2, 3] [1, 2, 3]
    

    等价于

    y=[1,2,3]

    x=y

    3.增量赋值

       将赋值表达式中x=x+1的表达式运算符(本例中是+)放置在赋值运算符=的左边,写成x+=1。这种写法叫做增量赋值,对于*、/、%等标准运算符都适用。

    >>> x=2
    >>> x+=1
    >>> x
    3
    >>> x*=2
    >>> x
    6
    

        对于其他数据类型也同样适应。只要二元运算符本身适用这些数据类型即可。

    >>> fnord='foo'
    >>> fnord+='bar'
    >>> fnord
    'foobar'
    >>> fnord*=2
    >>> fnord
    'foobarfoobar'
    

    增量赋值可以让代码变得更加紧凑和简练。

    参考:

    Python基础教程(第二版.修订版) 

     

      

  • 相关阅读:
    Nginx——基本操作
    JavaWeb——关于RequestDispatcher的原理
    JavaWeb——XML转义符字
    JavaWeb——JSTL 核心标签库使用
    JavaWeb——jsp-config
    URL和URI区别
    Docker入门5------生产力工具docker-compose
    Docker入门4------Dockerfile
    Docker入门3------手动编辑自定义镜像
    Docker入门2------容器container常规操作
  • 原文地址:https://www.cnblogs.com/XYJK1002/p/4839795.html
Copyright © 2011-2022 走看看