您好,登录后才能下订单哦!
这篇文章给大家分享的是有关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序列解包、链式赋值、链式比较的案例就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。