• python 序列解包(解压缩)


    序列解包(解压缩)

    所学的解压缩

    如果我们给出一个列表,我们需要一次性取出多个值,我们是不是可以用下面的方式实现呢?

    name_list = ['nick', 'egon', 'jason']
    x = name_list[0]
    y = name_list[1]
    z = name_list[2]
    print(f'x:{x}, y:{y}, z:{z}')
    x:nick, y:egon, z:jason
    

    讲真,上面的方法真的是谁用谁知道,我们可以试一试解压缩。

    解压缩可以这样理解:超市打包是把多个商品放在一起,解压缩其实就是解包把多个商品一次性拿出来。

    name_list = ['nick', 'egon', 'jason', ]
    x, y, z = name_list
    print(f'x:{x}, y:{y}, z:{z}')
    x:nick, y:egon, z:jason
    

    有时候我们解压缩的值可能是我们不想要的,那么可以使用下划线,万能的下划线。

    name_list = ['nick', 'egon', 'jason', 'tank']
    x, y, z, a = name_list
    x, _, z, _ = name_list  # _相当于告诉计算机不要了,不能以_开头和结尾
    

    还能有一个更骚的操作,只可意会不可言传。

    name_list = ['nick', 'egon', 'jason', 'tank', 'kevin', 'jerry']
    x, y, _, _, _, z = name_list
    x, y, *_, z = name_list
    

    写程序不是用来装逼的,关键是创造价值。python追求的是简洁性,代码不要写的太长了。因此字典也是可以的,但是字典解压缩的是key。

    info = {'name': 'nick', 'age': 18}
    x, y = info
    print(x, y)
    name age
    

    序列解包

    所谓的解压缩就是将数据字符等从列表、字典、字符串等装有元素的容器取出需要的元素。

    这种方法并不限于列表和元组,而是适用于任意序列类型(甚至包括字符串和字节序列)。只要赋值运算符左边的变量数目与序列中的元素数目相等,你都可以用这种方法将元素序列解包到另一组变量中。

    解包的使用还可以更有逼格,可以利用 * 表达式获取单个变量中的多个元素,只要它的解释没有歧义即可。

    元组

    tuple_num=(1,2,3)
    first, second, third = tuple_num
    

    列表

    list_info=["lily",18,(2010,10,20)]
    name,age,birthday=list_info
    

    还可以这样,

    list_info=["lily",18,(2010,10,20)]
    name,age,(year,month,day)=list_info
    

    这里要注意的是,变量的个数和元素的个数要一致,否则会得到一个错误提示。

    t=(4,5)
    x, y, z = t
    
    

    将会得到下面的错误提示:

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

    其实,不仅仅是tuple或者list,只要对象是iterable的,那么就可以进行unpack操作。比如string、file、iterator、generator。

    字符串

    s="Hello"
    a,b,c,d,e=s
    
    

    Iterator

    ite=iter([2,3,45])
    i,t,e=ite
    print(i,t,e)
    
    123
    
    

    generator

    g = (x * 2 for x in range(3))
    x,y,z=g
    print(x,y,z)
    
    
  • 相关阅读:
    再收藏一篇: oracle批量绑定 forall bulk collect用法以及测试案例
    Dll中导出导入时巧用条件编译指令共享头文件
    Oracle不支持在select语句中调用自定义函数时使用自定义类型作参数?
    (Alan Murta)编制的多边形集合运算软件包(general polygon clipping library,简称GPC)
    MSDN:CFile和CStdioFile区别以及CString中的'\r\n'
    REF CURSOR 小结
    Oracle存储过程中执行DDL操作
    Oracle在存储过程中,如何删除和创建表?
    收藏:关于表名也动态的动态SQL文章
    用Select查询结果创建ACCESS表
  • 原文地址:https://www.cnblogs.com/TMesh/p/11731018.html
Copyright © 2020-2023  润新知