zoukankan      html  css  js  c++  java
  • 六、赋值魔法与代码块

    序列解包

    赋值语句见过很多,有的给变量赋值,还有给数据结构的一部分(如列表中的元素和切片、或字典项)赋值,但还有其它类型的赋值。

    同时(并行)给多个变量赋值:

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

     这种方式还可交换多个

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

      这里执行的操作成为序列解包(或可迭代对象解包):将一个序列(或任何可迭代的对象)解包,并将得到的值存储到一系列变量中。

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

      这在使用返回元祖(或其它序列或可迭代对象)的函数或方法时很有用。假设要从字典中随机获取(删除)一个键-值对,可使用popitem,它会获取一个键-值对,并以元祖的方式返回。这样,就可直接将返回的元祖解包到俩个变量。

    >>> phonebook = {'lilei':666, 'hanmeimei':888}
    >>> name, phone = phonebook.popitem()
    >>> name
    'hanmeimei'
    >>> phone
    888
    

      PS:要解包的序列包含的元素必须与你再等号左边列出的目标个数相同。否则会抛出异常。

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

      可使用星号运算符(*)来收集多余的值,这样无需确保值和变量的个数相同,

    >>> a, b, *rest = 1, 2, 3, 4, 5 
    >>> rest
    [3, 4, 5]
    

      还可以将带*号的变量放在其他位置:

    >>> a, *b, c = 1, 2, 3, 4, 5
    >>> b
    [2, 3, 4]
    

      赋值语句的右边可以是任何类型的序列,但是带*号的变量最终包含的总是一个列表。在变量和值的个数相同时亦如此:

    >>> a, *b, c = 1, 2, 3
    >>> b
    [2]
    

      链式赋值

    链式赋值时一种快捷方式,用于将多个变量关联到同一个值。

    >>> x = y = 'hello'

    等价于

    >>> y = 'hello'
    >>> x = y 
    

      增强赋值

    可以不编写代码x = x + 1,而将右边表达式中的运算符(这里是+)移到赋值运算符(=)的前面,从而写成 x += 1.这成为增强赋值,适用于所有的标准运算符。如  *、/、%等。

    增强赋值也可用于其他的数据类型(只要使用的时双目运算符可用于这些数据类型)

    >>> name = 'root'
    >>> name += 'ubuntu'
    >>> name
    'rootubuntu'
    >>> name *= 2
    >>> name
    'rootubunturootubuntu'
    

     代码块

    代码块是一组语句,可在满足条件时执行(if语句),可执行多次(循环),等等,代码块是通过缩进代码来创建的。

    在同一个代码中,各行代码的缩进量必须相同。

    在Python中,使用冒号(:)指出接下来是一个代码块,并将该代码块的每行代码都缩进相同的程度。

    当缩进量与之前相同时,该代码块就到此结束了。

     

     

  • 相关阅读:
    java正则表达式学习
    使用TypeScript,AngularJs和Web API构建基本的CRUD Web 应用
    漫话CLR ---- 常量与字段
    漫话CLR ---- 属性
    漫话CLR ---- 定制Attribute
    分享一个线程安全的加载窗体
    漫话CLR ---- 类型基础
    漫话CLR ---- 委托
    js 数组遍历for..in弊端
    使用call来实现继承
  • 原文地址:https://www.cnblogs.com/kongzhou/p/9020701.html
Copyright © 2011-2022 走看看