Python中的解包用法

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

Python中的解包用法

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

可迭代对象支持解包(unpacking)

可迭代对象如列表、元组、字典、集合、字符串、生成器等支持自动解包。可迭代对象直接赋值给多个变量,此时可迭代对象的各元素会被依次赋值给每个变量。

列表中有3个元素,那么刚好如果列表中有3个元素,那么刚好可以分配给3个变量。示例源码如下:

a, b, c = [1,2,3]
print(a) #输出:1
print(b) #输出:2
print(c) #输出:3

运行效果:

元组解包示例源码如下:

a, b, c =(10,20,30)
print(a) #输出:10
print(b) #输出:20
print(c) #输出:30

字符串解包示例源码如下:

a,b,c = 'xyz'
print(a) #输出:x
print(b) #输出:y
print(c) #输出:z

 生成器表达式解包示例源码如下:

a,b,c = (x + 10 for x in range(3))
print(a) #输出:10
print(b) #输出:11
print(c) #输出:12

多变量赋值操作

多变量赋值操作,等号右边其实是一个元组对象。示例源码如下:

a, b, c = 10,20,30
print(a) #输出:10
print(b) #输出:20
print(c) #输出:30

交换两个变量

在Python 中,交换两个变量非常方便,本质上也是自动解包过程。示例源码如下:

a, b = 10, 20
a, b = b, a  #交换两个变量值
print(a) #输出:20
print(b) #输出:10

使用组合元组打包(在等号 (=) 右边发生)和解包(在等号 (=) 左边发生),利用这个功能可以进行变量交换。“a, b = b, a” 将b和a打包在一起,并在解包时交换它们的位置。

“catch-all”名称变量

等号左边变量的个数不等于右边可迭代对象中元素的个数怎么办?

详见PEP 3132 https://peps.python.org/pep-3132/

变量面前有星号——“catch-all”名称变量可以获取多个数值,这个星号可以放在任意变量,每个变量都分配一个元素后,剩下的元素作为列表(list)都分配给这个带星号的变量。

示例源码如下:

a, *b, c = [1, 2, 3, 4, 5]  #注意星号的使用与作用
print(a) #输出:1
print(b) #输出:[2,3,4]
print(c) #输出:5x, *y, z =(11, 12, 13, 14)  #注意的使用与作用
print(x) #输出:11
print(y) #输出:[12,13]
print(z) #输出:14

运行效果:

*单星号用于解包迭代,**双星号用于解包字典

可参见https://peps.python.org/pep-0448/ 此PEP提出了*可迭代解包操作符(iterable unpacking operator)和**字典解包操作符(dictionary unpacking operators)的扩展用法
PEP448建议扩展使用*可迭代解包运算符和**字典解包运算符,以允许在更多位置、任意次数和其他情况下进行解包。特别是在函数调用(function calls)、推导式(comprehensions)和生成器表达式(generator expressions)以及显示中。
【python推导式(comprehensions)https://blog.csdn.net/cnds123/article/details/117395558 
生成器表达式(Generator expressions)https://blog.csdn.net/cnds123/article/details/116695925 】

使用星号(*)和双星号(**)用于解包的例子源码

print(*[1], *[2, 3, 4], 5) #输出:1 2 3 4 5
print(*range(4), 10,20) #输出:0 1 2 3 10 20
print([*range(4), 10,20]) #输出:[0, 1, 2, 3, 10, 20]
print(dict(**{'a': 1,'b': 2 }, c=3,**{'d': 4})) #输出:{'a': 1, 'b': 2, 'c': 3, 'd': 4}

运行效果:

下面介绍函数调用时的星号*和 双星号**的使用情况

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

示例源码如下:

def func(a,b,c): #func 函数定义了三个位置参数 a,b,cprint(a,b,c)func(1,2,3) #调用func函数,通常需要三个参数,输出:1 2 3
func(*[1,2,3]) #也可以用*符号传入包含有3个元素的可迭代对象,输出:1 2 3
func(*"abc") #用*符号传入包含有3个元素的可迭代对象,输出:a b c
func(*{"a":10,"b":20,"c":30})#用*符号传入包含有3个元素的可迭代对象,输出:a b c
func(**{"a":10,"b":20,"c":30})#用**符号传入包含有3个元素的可迭代对象,输出:10 20 30
func(a=10,b=20,c=30) #注意这句和上句效果

运行效果:

用双星号作用的对象是字典对象,解包成关键字参数 key=value 的格式。

多个值封包(packing)成一个元组

把多个值赋给一个变量时,Python会自动把多个值封包(packing)成一个元组,源码如下:

a = 1,2,3,4,5
print(a) #多个值封包成一个元组

运行效果:

参考
https://zhuanlan.zhihu.com/p/41968260
https://blog.51cto.com/u_15127595/3268947


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

相关文章

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 自动化方案的特点: 开源免费支持多个平台支持多种类型的自动…

Appium 简介

1.1 Appium 概述 Appium 是一个开源、跨平台(测试程序跨平台、支持多平台上的app测试)、多语言支持的(开发语言)移动应用自动化工具。 1.1.1 测试对象 Appium 的测试对象包括:原生 app,混合 app&#xf…

Appium 简明教程

转载:Appium 简明教程:http://www.testclass.net/appium https://www.cnblogs.com/fnng/p/4540731.html Appium 官网:http://appium.io/ Github 地址:https://github.com/appium/appium 主要包括以下几部分: appium新…