python的解包

article/2025/9/23 5:33:35

解包在英文里叫做 Unpacking,就是将容器里面的元素逐个取出来(防杠精:此处描述并不严谨,因为容器中的元素并没有发生改变)放在其它地方,好比你老婆去菜市场买了一袋苹果回来分别发给家里的每个成员,这个过程就是解包。Python 中的解包是自动完成的,例如:

如果列表中有3个元素,那么刚好可以分配给3个变量。除了列表对象可以解包之外,任何可迭代对象都支持解包,可迭代对象包括元组、字典、集合、字符串、生成器等实现了__next__方法的一切对象。

元组解包

字符串解包

字典解包

字典解包后,只会把字典的 key 取出来,value 则丢掉了。

你可能见过多变量赋值操作,例如:

本质上也是自动解包过程,等号右边其实是一个元组对象 (1, 2),有时候我们代码不小心多了一个逗号 ,,就变成了元组对象

所以写代码的时候需要特别注意。在 Python 中,交换两个变量非常方便,本质上也是自动解包过程。

如果在解包过程中,遇到左边变量个数小于右边可迭代对象中元素的个数时该怎么办? 好比你们家有3口人,你老婆却买了4个苹果,怎么分配呢?

在 Python2 中,如果等号左边变量的个数不等于右边可迭代对象中元素的个数,是不允许解包的。但在 Python3 可以这么做了。这个特性可以在 PEP 3132 中看到。

这种语法就是在某个变量面前加一个星号,而且这个星号可以放在任意变量,每个变量都分配一个元素后,剩下的元素都分配给这个带星号的变量

这种语法有什么好处呢?它使得你的代码写起来更简洁,比如上面例子,在 Python2 中该怎么操作呢?思考3秒钟,再看答案。

以上是表达式解包的一些操作,接下来介绍函数调用时的解包操作。函数调用时,有时你可能会用到两个符号:星号*和 双星号**

func 函数定义了三个位置参数 a,b,c,调用该函数必须传入三个参数,除此之外,你也可以传入包含有3个元素的可迭代对象,

函数被调用的时候,使用星号 * 解包一个可迭代对象作为函数的参数。字典对象,可以使用两个星号,解包之后将作为关键字参数传递给函数

看到了吗?和上面例子的区别是多了一个星号,结果完全不一样,原因是什么? 答案是** 符号作用的对象是字典对象,它会自动解包成关键字参数 key=value 的格式:

如果字典对象中的 key 不是 a,b,c,会出现什么情况?请读者自行测试。

总结一下,一个星号可作用于所有的可迭代对象,称为迭代器解包操作,作为位置参数传递给函数,两个星号只能作用于字典对象,称之为字典解包操作,作为关键字参数传递给函数。使用 *和 ** 的解包的好处是能节省代码量,使得代码看起来更优雅,不然你得这样写:

到这里,解包还没介绍完,因为 Python3.5,也就是 PEP 448 对解包操作做了进一步扩展, 在 3.5 之前的版本,函数调用时,一个函数中解包操作只允许一个* 和 一个**。从 3.5 开始,在函数调用中,可以有任意多个解包操作,例如:

再来看看 python3.5以上版本

从 3.5 开始可以接受多个解包,于此同时,解包操作除了用在函数调用,还可以作用在表达式中。

新的语法使得我们的代码更加优雅了,例如拼接两个列表可以这样:

可不可以直接用 + 操作呢?不行,因为 list 类型无法与 range 对象相加,你必须先将 list2 强制转换为 list 对象才能做 +操作,这个留给读者自行验证。

再来看一个例子:如何优雅的合并两个字典

在3.5之前的版本,你不得不写更多的代码:

到此,关于 Python 解包给你介绍完了。

最后总结一下:

  1. 自动解包支持一切可迭代对象
  2. python3中,支持更高级的解包操作,用星号操作使得等号左边的变量个数可以少于右边迭代对象中元素的个数。
  3. 函数调用时,可以用 * 或者 ** 解包可迭代对象,作为参数传递
  4. python3.5,函数调用和表达式中可支持更多的解包操作。

http://chatgpt.dhexx.cn/article/FISq1xa3.shtml

相关文章

apk解包+修改源码+重新打包 修改Android端app教程 修改apk文件教程

修改之前一定要先安装java开发环境,不会装的去自行百度。文章较长,耐心阅读。 一直在做Android应用开发,但对于从自己手中输出的apk包,了解并不是很深。最近想研究一下,消除下自己的一些技术盲点。 好吧,…

Python中的解包用法

Python中的解包用法 解包(unpacking:解包,拆包),基本意思将容器里面的元素逐个取出来使用。封包(packing:封包,打包)基本意思将多个元素合起来作为一个整体使用。 可迭代…

SIP协议说明以及报文字段解析

SIP协议的概念: SIP 协议,即 会话初始协议(Session Initiation Protocol),是一个应用层的 点对点协议,用于初始、管理和终止网络中的语音和视频会话,是 GB28181 的核心之一。 SIP是一个基于文本…

SIP 协议格式简介

消息体结构,由三部分组成: Request-Line / Status-Line (请求行 / 状态行)Header (消息头)Body (正文) 示例: Request-Line / Status-Line 介绍 Request-Line 格式: MethodRequest-URISIP-VersionCRLFINVITEsip:10011.1.1.1:5060…

会话初始协议---SIP协议【详解】

目录 ​ 一、SIP协议简介 二、SIP消息的两种会话模式 1、Session Model 2、Pager Model 三、SIP消息体格式 1、请求行(request-line) 2、状态行(status-line) 3、消息头 四、SIP消息举例 1、MESSAGE消息(Pager Model) 2、REGISTER消息 &…

SIP协议-02 原理讲解

文章目录 1 SIP实现机制2 SIP网络元素2.1 用户代理2.2 代理服务器2.3 重定向服务器2.4 位置服务器2.5 注册服务器 3 SIP中的几个重要概念3.1 Messages(消息)3.2 Dialog(对话)3.3 Transaction(事务)3.4 Session(会话) 4 工作流程4.1 登记注册4.2 建立呼叫4.3 重定向呼叫 5 SIP超…

SIP协议(二)

语音编码,语音帧,会议室 (1)语音编码,语音帧 (2)补充会议室的抓包 语音编码 现主要有的语音编码有: G.711, G.723, G.726 , G.729, ILBC,QCELP, EVRC, AMR, SMV 各种编解码都有其…

SIP协议解析与实现

SIP协议解析与实现 本文将按照RFC3261逐步的介绍SIP协议,介绍了c和c语言的实现,分析了osip库的使用和实现。 第一章 概述 一 概述 SIP协议是一个基于应用层的会话控制协议。它可以创建、修改、终止多媒体会话(会议),也可以邀请参与者加入到一个现有的…

SIP协议-01 简介与入门

文章目录 1 介绍1.1 VoIP技术1.2 SIP(Session Initiation Protocol)1.3 SIP承载1.4 SIP的几个主要标准协议 2 SIP协议栈2.1 PJSIP协议栈2.2 ReSIProcate协议栈2.3 OPAL协议栈2.4 VOCAL协议栈2.5 sipX协议栈2.6 oSIP协议栈 SIP(Session Initia…

通信系列2: 深入浅出SIP协议

传统电话是电磁波的通信,当电话技术发展到IP技术时代,SIP协议成为了电话通信标准协议,不仅可以通电话、还可以收发信息、视频、开会、放PPT。事实上,今天的通信业已全面采用SIP协议作为通信标准,无论是固定电话、还是移…

SIP协议简介(一)之SIP基本的概述

本篇文章主要是对RFC3261翻译进行的,也包含着自己的一些理解。希望能给需要的人带来一些帮助 补充说明:RFC即Request For Comments(RFC),是一系列以编号排定的文件。文件收集了有关互联网相关信息,以及UNI…

SIP协议(一)

熟悉SIP的一些基本常识概念相关协议, 网络元素,分层结构, 不同请求消息类型,响应消息类型 SDP的一些概念基础 SIP SIP(Session Initiation Protocol)会话初始化协议,是有IETE(I…

SIP协议简介(比较全面)

介绍 通信提供商及其合作伙伴和用户越来越渴求新一代基于 IP 的服务。现在有了 SIP协议(会话启动协议),一解燃眉之急。SIP协议 是不到十年前在计算机科学实验室诞生的一个想法。它是第一个适合各种媒体内容而实现多用户会话的协议&#xff0…

【入门篇】SIP 协议详解

本博客转载自:https://xiaxl.blog.csdn.net/article/details/104661248 SIP 协议详解 2013年参与过一个“视频通讯的App”项目,使用Sip协议通信。当时通信协议这块不是自己负责,加上时间紧、任务重等方面的原因,一直未对Sip协议进…

[Appium] Appium自动化测试原理及配置项

Appium自动化测试原理及配置项 一、App自动化测试原理 通过设计自动化脚本,通过发送指令到Appium Server,然后Appium Server转发指定到Android SDK框架来操作被测手机,这个类似于selenium通过浏览器驱动来操作浏览器 Android SDK不同系统不…

Appium 使用

前提是手机易经通过adb连接到电脑 1、打开Appium 点击startServer 2、打开Appium Inspector 填写下面的数据 desired_caps常用参数:platformName 平台的名称:iOS, Android, or FirefoxOSplatformVersion 设备系统版本号deviceName 设备…

Appium+Python第一篇:appium的基本使用及启动APP

一、appium的基本使用 appium环境安装 1、安装Android SDK (1)配置环境变量 用户变量的path添加以下三个路径: %ANDROID_HOME%\build-tools\31.0.0 %ANDROID_HOME%\platform-tools %ANDROID_HOME%\tools - 系统变量添加: 变量…

Appium - 入门指南(偏重于实际操作)

前言 此文章 偏向于实操 appium支持在不同平台上(windows,linux、mac) - 使用测试脚本(支持不同语言C #,json,Ruby等等) - 模拟测试各个平台的app(web、windows、mobile等&#xff…

appium原理常用指北

环境搭建外文链接 1、appium电脑手机连接 环境需要:jdk、sdk、appium服务、手机(打开开发者模式) 检验:手机数据线连接电脑,电脑终端输入查看命令,出现设备表示连接成功。 adb devices启动appium服务,默认端口4723就…

手机APP自动化 Appium教程

Appium原理与安装 Appium 是一个移动 App (手机应用)自动化工具。 手机APP 自动化有什么用? 自动化完成一些重复性的任务比如微信客服机器人爬虫自动化测试 Appium 自动化方案的特点: 开源免费支持多个平台支持多种类型的自动…