一、序列解包

  序列解包(或可迭代对象解包):解包就是从序列中取出其中的元素的过程,将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中。

  一般情况下要解包的序列包含的元素个数必须与你在等号左边列出的目标个数相同,否则Python将引发异常。但如果要解包序列元素个数与左边变量数不同的情况下,可使用星号运算符(*)来收集多余的值,这样无需确保值和变量的个数相同,还可将带星号的变量放在任何位置。赋值语句的右边可以是任何类型的序列,但带星号的变量最终包含的总是一个列表。在变量和值的个数相同时亦如此。这种解包方式也可用于函数参数列表中。

  举例:

  \>>>l,s,t,d=['a','bc','de'],'abcd',(1,2,3),{1:'a',2:'b'} #定义4个列表、字符串、元组和字典变量;

  \>>>l1,l2,l3=l #用l1、l2、l3解包列表,l1,l2,l3分别得到值'a', 'bc', 'de';

  \>>>s1,*s2,s3=s #用s1、s2、s3解包字符串,s1,s2,s3分别得到值'a', ['b', 'c'], 'd',注意星号的使用;

  \>>>t1,*t2=t #用t1、t2解包元组,t1,t2分别得到值1, [2, 3];

  \>>>d={i:chr(ord('a')+i) for i in range(5)} #d={0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e'}

  \>>>d1,*d2,d3=d #d1=0,d2=[1,2,3],d3=4,这个解包得到的是字典的键,不是字典项

  代码执行截屏如下:无锡看男科哪家好 http://www.03913881333.com/

  

  

  上面代码中,要得到字典的键和值,可以使用:k,v=d.popitem() #k=4, v='e'。

  二、复杂序列解包

  上面介绍的序列解包所举例子是一种比较简单的情况,即序列中的元素类型不是容器类型,但如果出现序列中的元素也是序列,此时需要使用复杂序列解包。

  复杂序列解包是在序列中内嵌序列的情况下,解包语句的左边也可以包含对应序列,从而对序列中的序列进行解包。看下面的例子:

  \>>>a,[b,c],*d=(1,(2,3),4,5)

  \>>>a,(b,c),*d=(1,[2,3],4,5)

  以上两个语句执行后,a,b,c,d对应的值都是对应为:1, 2, 3, [4, 5]

  \>>>a,(b,*c),*d=(1,[2,3,10],4,5)

  解包后,a,b,c,d对应的值分别为:1, 2, [3, 10], [4, 5]

  \>>>a,(b,c,e),*d=(1,[2,3,{10,11}],4,5)

  解包后,a,b,c,d,e对应的值分别为:1, 2, 3, [4, 5], {10, 11}

  三、链式赋值

  链式赋值是用一行语句将多个变量赋值为同一个值,语法如下:

  变量1=变量2=变量n=赋值表达式

  该语法实际执行效果类似于:

  变量n=赋值表达式

  变量2=变量n

  变量1=变量2

  这种执行效果表示所有变量都指向同一个对象。

  注意:上面部分关于赋值顺序的描述错误,感谢博友Johnny592的提醒,为了让看到本文的人加深印象,老猿没有直接修改这部分内容,而是在此说明,并另外在博文《关于链式赋值的赋值顺序问题》中进行了详细说明。

  四、链式比较

  链式比较就是在一个比较语句中部使用逻辑运算符直接判断某个数据是否在某区间,如:if 0=

  本节介绍了序列解包、链式赋值和链式比较,序列解包稍微复杂一点,链式赋值和链式比较非常简单,就没有展开细说。

Python特色的序列解包、链式赋值、链式比较的更多相关文章

  1. 第4.7节 Python特色的序列解包、链式赋值、链式比较

    一.序列解包 序列解包(或可迭代对象解包):解包就是从序列中取出其中的元素的过程,将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中. 一般情况下要解包的序列包含的元素个数必须与你在等 ...

  2. Python中序列解包与函数的参数收集之间的关系

    在<第4.7节 Python特色的序列解包.链式赋值.链式比较>中老猿介绍了序列解包,<第5.2节 Python中带星号的函数参数实现参数收集>介绍了函数的参数收集,实际上函数 ...

  3. Python3 序列解包

    转载自:https://blog.csdn.net/yilovexing/article/details/80576788 序列解包是 Python 3.0 之后才有的语法 什么是序列解包呢?先看一个 ...

  4. python 零散记录(五) import的几种方式 序列解包 条件和循环 强调getattr内建函数

    用import关键字导入模块的几种方式: #python是自解释的,不必多说,代码本身就是人可读的 import xxx from xxx import xxx from xxx import xx1 ...

  5. Python中的可变、不可变对象和赋值技巧序列解包

    可变对象和不可变对象 在python中一切皆对象.在Python中不存在所谓的值传递调用,一切传递都是对象的引用,也可认为是传址. python中,对象分为可变(mutable)和不可变(immuta ...

  6. Python——序列封包与序列解包

    一.序列封包与序列解包 把多个值赋给一个变量时,Python会自动的把多个值封装成元组,称为序列封包. 把一个序列(列表.元组.字符串等)直接赋给多个变量,此时会把序列中的各个元素依次赋值给每个变量, ...

  7. python 序列解包(解压缩)

    序列解包(解压缩) 所学的解压缩 如果我们给出一个列表,我们需要一次性取出多个值,我们是不是可以用下面的方式实现呢? name_list = ['nick', 'egon', 'jason'] x = ...

  8. 在python中元组与列表的区别及序列解包

    一. 元组与列表的区别 元组中的数据一旦定义就不允许更改. 元组没有append().extend()和insert()等方法,无法向元组中添加元素. 元组没有remove()或pop()方法,也无法 ...

  9. Python序列解包

    元组的序列解包range对象的序列解包迭代对象的序列解包列表的序列解包字典的序列解包序列解包与遍历序列解包的其它用法 元组的序列解包 x,y,z = (1,2,3) print(x,y,z) 1 2 ...

随机推荐

  1. MySQL 设计与开发规范2

    目录 1. 规范背景与目的 2. 设计规范 2.1. 数据库设计 2.1.1. 库名 2.1.2. 表结构 2.1.3. 列数据类型优化 2.1.4. 索引设计 2.1.5. 分库分表.分区表 2.1 ...

  2. MQTT研究之EMQ:【EMQX使用中的一些问题记录(2)】

    我的测试环境: Linux: CentOS7 EMQX:V3.2.3 题外话: 这里主要介绍Websocket的支持问题. 对ws的支持比较正常,但是对wss的支持,调了较长的时间,没有成功. Jav ...

  3. Python之快速排序代码

    def quicksort(array): less = [] greater = [] if len(array) <= 1: return array pivot = array.pop() ...

  4. Angular8开发拼多多WebApp_汇总贴

    https://coding.imooc.com/class/336.html?mc_marking=b9f5e475d0cb8922d899d416f5b4433f&mc_channel=s ...

  5. 安装 create-react-app@latest 失败,错误代码:243

    在创建react项目,执行以下命令的时候 npx create-react-app my-app 报错如下: 解决方案: 全局安装即可 npm install -g create-react-app

  6. Python浮点数数据精度控制

    代码 import decimal from decimal import Decimal, getcontext if __name__ == '__main__': decimal.getcont ...

  7. Zabbix使用第三方API短信报警

    之前试过邮件告警,微信告警.但是,对于一些企业的重要业务服务器,可能是存放在隔离的内网中的,无法正常连接外网.这个时候,就有必要考虑一下使用短信告警.以下这个其实还是需要服务器能够连接到外网的,但是我 ...

  8. 2019最新版Java程序员零基础入门视频教程资料(全套)

    为了解决Java学习初学者在网上找视频难的事情,本人整理了一份2019年度最新版的Java学习视频教程.希望看到这份视频的你们都能找到一份称心的工作,技术上都能得到进一步的提升,好东西就要分享给你们, ...

  9. 前端向后端获取数据的三种方法:ajax、axios、fetch

    1.jQuery中的ajax get方法: $.ajax({ url:"v4/api/film/now-playing?t=1539401039415&page=1&coun ...

  10. SQL Server 类似正则表达式的字符处理问题

    SQL Serve提供了简单的字符模糊匹配功能,比如:like, patindex,不过对于某些字符处理场景还显得并不足够,日常碰到的几个问题有: 1. 同一个字符/字符串,出现了多少次 2. 同一个 ...