第4.7节 Python特色的序列解包、链式赋值、链式比较
一、序列解包
序列解包(或可迭代对象解包):解包就是从序列中取出其中的元素的过程,将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中。
一般情况下要解包的序列包含的元素个数必须与你在等号左边列出的目标个数相同,否则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,这个解包得到的是字典的键,不是字典项
代码执行截屏如下:
上面代码中,要得到字典的键和值,可以使用: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=<weekday<5。
本节介绍了序列解包、链式赋值和链式比较,序列解包稍微复杂一点,链式赋值和链式比较非常简单,就没有展开细说。
老猿Python系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。
欢迎大家批评指正,谢谢大家关注!
相关文章
- 腾讯测试高人分享4个关于 Python 函数(方法)的冷知识
- python序列中是否包含某个元素
- python 序列排序 排序后返回相应的索引
- python生成订单号或生成任意序列
- Python招聘需求猛增123%!学完Python工资多少?
- 81 python - 打飞机案例(源码)
- 测试人员为什么学 Python ?能做什么事?
- gyp ERR! stack Error: Can‘t find Python executable “python“, you can set the PYTHON env variable.
- Python 判断字符串是否为数字
- 不可不知道的python装饰器
- Python Django开发中XSS内容过滤问题的解决
- 《树莓派Python编程入门与实战》——1.4 其他不错的外设
- 《Python Cookbook(第3版)中文版》——1.12 找出序列中出现次数最多的元素
- 《Python Cookbook(第3版)中文版》——6.6 解析、修改和重写XML
- python学习之把列表元素拼接成字符串的4种方法
- Python中的序列操作
- python 正则表达式匹配过程
- Python机器学习零基础理解时间序列ARIMA
- Python 物联网之用于基于 TinyFlux的物联网和分析应用程序的微型时间序列数据库
- python跟踪UR5机械臂示教的轨迹(机械臂末端点坐标),并保存成txt/json格式
- 【转载】 python之理解super及MRO列表
- 华为OD机试 - 非严格递增连续数字序列(Python)
- 华为OD机试 - 最多等和不相交连续子序列(Python)| 真题+思路+考点+代码+岗位
- python提示警告InsecureRequestWarning
- Python蓝桥杯训练:数组和字符串 Ⅲ
- Python每日一学 08——get()方法学习
- 电商 Python 访客Excel合并
- Python入门学习笔记第九章——类~~~
- [Python] is与==的区别