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

解包的艺术:Python 中简洁高效的数据拆解与赋值技巧!! 解包的艺术: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的世界。
欢迎大家批评指正,谢谢大家关注!

Day016: Python 中的序列解包 ​在 Python 编程中,序列解包(Sequence Unpacking)是一种非常强大且灵活的功能。它允许我们将序列(如列表、元组等)中的元素快速地赋值给多个变量。通过序列解包,我们可以简化代码,提高代码的可读性和效率。本文将详细介绍 Python 中的序列解包,包括其基本用法、高级技巧以及在实际编程中的应用场景。 阅读详情

相关推荐

Python中的序列解包

综上所述,序列解包是Python中一个非常强大的特性,可以帮助我们简化代码并使其更易读。在我们处理列表、元组或编写返回多个值的函数时,序列解包特别有用。

Saki_Python的博客 953

【Python小知识】:什么是序列解包

之前讲过,我们将多个值赋给一个变量,那么这个变量就是一个元组 事实上就是Python将这个变量封装成一个元组 这就是序列封包 序列解包(Sequence Unpacking)----属于Python赋值语句的一种方法,或者说技巧。 简单地说,序列解包是Python特有的语法,它将可迭代对象给解开,将得到的值存储到一系列变量中。

翼同学 9309

Python基础语句详解:从赋值到控制流

Python作为一门高级编程语言,其语句结构设计体现了简洁优雅的哲学。在编程语言基础中,语句是构成程序的基本单元,Python通过独特的缩进规则替代了传统的大括号语法,这种设计既提升了代码可读性,也带来了更严格的格式要求。从技术实现来看,Python语句可分为简单语句、复合语句和特殊语句三大类,涵盖了变量赋值、表达式运算、流程控制等核心编程概念。在实际工程应用中,合理使用Python语句能显著提升开发效率,特别是在数据处理、自动化脚本等场景下,多重赋值、序列解包等特性可以简化代码逻辑。掌握Python语句规

weixin_33178839的博客 288

python链式赋值_Python特色的序列解包、链式赋值、链式比较

一、序列解包序列解包(或可迭代对象解包):解包就是从序列中取出其中的元素的过程,将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中。一般情况下要解包的序列包含的元素个数必须与你在等号左边列出的目标个数相同,否则Python将引发异常。但如果要解包序列元素个数与左边变量数不同的情况下,可使用星号运算符(*)来收集多余的值,这样无需确保值和变量的个数相同,还可将带星号的变量放在任何位置...

weixin_39873456的博客 537

【YOLOv7-环境搭建】PyTorch安装后输出版本显示No module named ‘Torch’的解决方法

【YOLOv7-环境搭建】PyTorch安装后输出版本显示No module named ‘Torch’的解决方法:①检查PyCharm导入的环境是否错误②添加Torch包

qq_59942266的博客 4970

实验三 Gmapping建图

自主移动机器人第三次实验课,内容包括:(1)turtlebot的gmapping建图;(2)rosbag的使用;(3)gazebo中的gmapping建图。

lj164567487的博客 4648

Python特色的序列解包、链式赋值、链式比

一、序列解包 序列解包(或可迭代对象解包):解包就是从序列中取出其中的元素的过程,将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中。 一般情况下要解包的序列包含的元素个数必须与你在等号左边列出的目标个数相同,否则Python将引发异常。但如果要解包序列元素个数与左边变量数不同的情况下,可使用星号运算符(*)来收集多余的值,这样无需确保值和变量的个数相同,还可将带星号的变...

weixin_45342712的博客 426

OpenClaw 接入智谱 GLM-5-Turbo 龙虾套餐:完整避坑指南与 SOP

OpenClaw 接入智谱 GLM-5-Turbo 的核心在于“端点匹配”和“多渠道验证”。端点匹配:龙虾套餐必须用标准端点。多渠道验证:遇到 TUI 不显示时,用curl或飞书机器人验证,不要被 Bug 误导。希望这份 SOP 能帮你顺利跑通 OpenClaw + GLM-5-Turbo,享受强大的 AI 编程助手!

Aaron_liu20的博客 1701

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

  一、序列解包   序列解包(或可迭代对象解包):解包就是从序列中取出其中的元素的过程,将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中。   一般情况下要解包的序列包含的元素个数必须与你在等号左边列出的目标个数相同,否则Python将引发异常。但如果要解包序列元素个数与左边变量数不同的情况下,可使用星号运算符(*)来收集多余的值,这样无需确保值和变量的个数相同,...

weixin_30650859的博客 147

《详细指南:本地部署Ollama大型模型的完整步骤》

通过本指南,您应该能够成功地在本地部署Ollama大型模型,并开始使用它进行各种AI任务。Ollama的易用性和高性能使其成为研究和开发的理想选择。Ollama是一个高性能的AI模型部署平台,支持在本地轻松部署大型语言模型。本指南将详细介绍如何在本地环境中部署Ollama,并运行一个大型模型。

eclipsercp的博客 3695

360加固DEX解密与ELF修复技术解析

本文深入解析360加固的DEX解密与ELF修复技术,详细介绍了其多层保护机制、Java层入口分析、Native层加载流程及反调试绕过技巧。通过RC4和zlib解密技术,结合Frida工具实现内存Dump和ELF文件修复,为逆向工程师提供实用解决方案。

weixin_29327525的博客 506

python 链式比较 2._特色的Python序列解包、链式赋值、链式比较

一、序列解包序列解包(或可迭代对象解包):解包就是从序列中取出其中的元素的过程,将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中。一般情况下要解包的序列包含的元素个数必须与你在等号左边列出的目标个数相同,否则Python将引发异常。但如果要解包序列元素个数与左边变量数不同的情况下,可使用星号运算符(*)来收集多余的值,这样无需确保值和变量的个数相同,还可将带星号的变量放在任何位置...

weixin_32802111的博客 191

解密m3u8视频合并:从猫抓插件到本地文件修改全流程

本文详细解析了m3u8视频合并的全流程,特别针对加密视频片段提供了解决方案。从使用猫抓插件捕获m3u8文件地址,到利用N_m3u8DL-CLI工具自动下载、解密并合并ts片段,手把手教你处理AES-128加密等常见问题,最终生成完整的本地MP4文件,适合需要备份或处理流媒体资源的用户。

weixin_29290947的博客 1359

关于Python链式赋值的赋值顺序问题

在《第4.7节 Python特色的序列解包、链式赋值、链式比较》一文中,老猿这样介绍的: 链式赋值是用一行语句将多个变量赋值为同一个值,语法如下: 变量1=变量2=变量n=赋值表达式 该语法实际执行效果类似于: 变量n=赋值表达式 变量2=变量n 变量1=变量2 有优快云的博友Johnny592友情指出老猿这种解释错了,正确的应该是“ a=...

老猿Python 5606

AI: 机器学习的模型是如何训练的?(在试错中学习)

一句话理解机器学习一般训练过程 :通过有标签样本来调整(学习)并确定所有权重Weights和偏差Bias的理想值。 训练的目标:最小化损失函数 (损失函数下面马上会介绍) 机器学习算法在训练过程中,做的就是:检查多个样本并尝试找出可最大限度地减少损失的模型;目标就是将损失(Loss)最小化 在这里插入图片描述 上图就是一般模型训练的一般过程(试错过程),其中 模型: 将一个或多个特征作为输入,然后返回一个预测 (y’) 作为输出。为了进行简化,不妨考虑一种采用一个特征并返回一个预测的模型,如下公式

HowieXue 薛永浩的博客 3万+

少儿学编程系列--使用递归画出龙形曲线DragonCurve

龙形曲线(Dragon Curve) 龙形曲线(Dragon Curve)又叫分形龙,是一种自相似碎形曲线的统称,因形似龙的蜿蜒盘曲而得名 使用黄金比例画龙形曲线 根据黄金比例画一条龙曲线。每次递归,第一步向左转32.89度,移动0.74倍原距离;第二个递归步骤向右转46.99度,移动原来距离的0.55倍。请查看这个网页(https://larryriddle.agnesscott.org/ifs/heighway/goldenDragon.htm)了解关于龙形黄线数学的细节 龙形曲线效果 .

penriver的博客 2296

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

在《第4.7节 Python特色的序列解包、链式赋值、链式比较》中老猿介绍了序列解包,《第5.2节 Python中带星号的函数参数实现参数收集》介绍了函数的参数收集,实际上函数的参数收集就是用序列解包的功能实现的。只是序列解包是将序列中多出的部分存放到星号后面的列表变量,而函数参数收集是将多出的参数存放到收集参数对应的元组变量。具体内容请参考上面介绍的两篇文章。 老猿Python,跟老猿学Pyth...

老猿Python 2255

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

第4章 基础知识进阶目录

第4.1节 Python基础概念之迭代、可迭代对象、迭代器 第4.2节 神秘而强大的Python生成器精讲 第4.3节 Python中与迭代相关的函数 第4.4节 Python解析与推导:列表解析、字典解析、集合解析 第4.5节 缩进、注释、文档字符串及标识符 第4.6节 print、import及断言 第4.7节 Python特色的序列解包、链式赋值、链式比较 第4.8节 三目运...

老猿Python 1642

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Python学习笔记(4)| 程序的描述方式与顺序结构,新手必看!

顺序结构就是按照代码书写的顺序,从上到下,依次执行,中间没有任何跳转或判断。这就好比我们早上起床的流程:穿衣服 -> 刷牙 -> 吃饭,必须按这个顺序来。顺序结构通常包含:赋值语句、输入输出语句、模块导入语句等。程序描述:在写代码前,先用IPO、流程图或伪代码把逻辑理清楚,能大大减少写Bug的概率。顺序结构:Python代码默认就是按顺序执行的。赋值技巧:掌握链式赋值和序列解包,能让你的代码更简洁。下一节我们将学习选择结构,也就是如何让程序根据不同情况做不同的事。敬请期待!

love_summerbest的博客 363

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

python语句

这里只列出python相对其他语言特色的地方。1,print和import的更多信息 print使用逗号输出多个表达式 使用别名: from module1 import functhion as aaa from module2 import functhion as bbb 将不同模块中的同名函数区分开2,赋值魔法 序列解包: ...

dianlu7964的博客 170

python链式函数_python 链式

人生苦短:Python里的17个“超赞操作人生苦短,我选Python”。那么,你真的掌握了Python吗?1. 交换变量有时候,当我们要交换两个变量的值时,一种常规的方法是创建一个临时变量,然后用它来进行交换。比如:# 输入a = 5b = 10#创建临时变量temp = aa = bb = tempprint(...文章yunqi201911132018-08-172020浏览量Python基础...

weixin_39874366的博客 693
上一篇: 第4.6节 print、import及断言
下一篇: 第4.8节 三目运算、del和pass语句
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值