首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 23-09-22 18:42
  • 2277
  • 10443
blog.csdn.net

 

一、序列解包

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

      一般情况下要解包的序列包含的元素个数必须与你在等号左边列出的目标个数相同,否则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=

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

老猿Python系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。
欢迎大家批评指正,谢谢大家关注!

文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树首页概览333596 人正在系统学习中
老猿Python
微信公众号
专注Python相关语言、图像音视频处理、AI
注:本文转载自blog.csdn.net的LaoYuanPython的文章"https://blog.csdn.net/LaoYuanPython/article/details/90645025"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top