zoukankan      html  css  js  c++  java
  • 2.5 序列解包

      在实际开发中,序列解包是一个非常重要和常用的一个功能,可以使用非常简洁的形式完成复杂的功能,大幅度提高了代码的可读性,并且减少了程序员的代码输入量。例如,可以使用序列解包功能对多个变量同时进行赋值,下面都是合法的Python赋值方法。

     1 >>> x,y,z = 1,2,3                      #多个变量同时赋值
     2 >>> 
     3 >>> v = (False,3.5,'exp')
     4 >>> 
     5 >>> (x,y,z) = v
     6 >>> 
     7 >>> x,y,z = v
     8 >>> 
     9 >>> x,y,z = range(3)                   #可以使用range对象进行序列解包
    10 >>> 
    11 >>> x,y,z = map(str,range(3))          #使用迭代对象进行序列解包

      序列解包也可以使用列表和字典,但是对字典使用是,默认是对字典“键”进行操作,如果需要对“键:值”对进行操作,需要使用字典的item()方法说明,如果需要对字典“值”进行操作,则需要使用字典的values()方法明确指定。下面的代码演示了列表与字典的序列解包操作:

     1 >>> a = [1,2,3]
     2 >>> b,c,d = a                  #列表也支持序列解包的用法
     3 >>> b
     4 1
     5 >>> 
     6 >>> x,y,z = sorted([1,3,2])    #sorted()函数返回排序后的列表
     7 >>> 
     8 >>> s = {'a':1,'b':2,'c':3}
     9 >>> 
    10 >>> b,c,d = s.items()       
    11 >>> 
    12 >>> b           #这里的结果如果和你的不一样是正常的,因为字典是无序序列
    13 ('a', 1)
    14 >>> 
    15 >>> b,c,d = s   #使用字典就不要考虑元素的顺序问题了
    16 >>> 
    17 >>> b
    18 'a'
    19 >>> 
    20 >>> b,c,d = s.values() 
    21 >>> 
    22 >>> b
    23 1
    24 >>> 
    25 >>> print(b,c,d)
    26 1 2 3
    27 >>> 

      使用序列解包可以很方便地同时遍历多个序列。

     1 >>> keys = ['a','b','c','d']
     2 >>> 
     3 >>> values = [1,2,3,4]
     4 >>> 
     5 >>> for k,v in zip(keys,values):
     6     print(k,v)
     7 
     8     
     9 a 1
    10 b 2
    11 c 3
    12 d 4
    13 >>> 
    14 >>> 
    15 >>> #下面代码演示了对内置函数enumerate()返回的迭代对象进行遍历时序列解包的用法:
    16 >>> 
    17 >>> x = ['a','b','c']
    18 >>> 
    19 >>> for i,v enumerate(x):
    20     
    21 SyntaxError: invalid syntax
    22 >>> 
    23 >>> for i,v in enumerate(x):
    24     print('The value on position {0} is {1}'.format(i,v))
    25 
    26     
    27 The value on position 0 is a
    28 The value on position 1 is b
    29 The value on position 2 is c
    30 >>> 
    31 >>> 
    32 >>> 
    33 >>> #下面对字典的操作也使用到序列解包:
    34 >>> s = {'a':1,'b':2,'c':3}
    35 >>> 
    36 >>> for k,v in s.items():    #字典的每个元素都包含“键”和“值”两部分
    37     print(k,v)
    38 
    39     
    40 a 1
    41 b 2
    42 c 3
    43 >>> 
    44 >>> 
    45 >>> #另外,序列解包还支持下面的用法:
    46 >>> 
    47 >>> print(*[1,2,3],4,*(5,6))
    48 1 2 3 4 5 6
    49 >>>  
    50 >>> * range(4),4
    51 (0, 1, 2, 3, 4)
    52 >>> 
    53 >>> 
    54 >>> * range(4),
    55 (0, 1, 2, 3)
    56 >>> 
    57 >>> { * range(4),4, * (5,6,7)}
    58 {0, 1, 2, 3, 4, 5, 6, 7}
    59 >>> 
    60 >>> {'x':1,**{'y':2}}
    61 {'x': 1, 'y': 2}
    62 >>> 

      小提示:

        (1)序列解包的有些用法在低版本Python中不支持;

        (2)在调用函数时,在实参前面加上一个星号(*)也可以进行序列解包,从而实现将序列中的元素值依次传递给相同数量的形参,详见3.3节。

  • 相关阅读:
    函数封装总结
    03.深入javascript
    02.JavaScript基础下
    html5权威指南:客户端分区响应图
    html5权威指南:定制input元素
    html5权威指南:表单元素
    html5权威指南:表格元素
    html5权威指南:组织内容、文档分节
    css布局理解
    html5权威指南:标记文字
  • 原文地址:https://www.cnblogs.com/avention/p/8552583.html
Copyright © 2011-2022 走看看