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

“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

Python中的解包用法相关推荐

  1. python中拆包解包用法详解

    python可以对元组和字典进行拆包或解包操作. 1.拆包:元组 示例代码1: def return_num():return 100, 200num1, num2 = return_num() pr ...

  2. python * ** 用法 python中的“解包符”

    '*' '**' > python中的"解包符" 1.单个'*' 去掉list,tuple,set的"外套" >>> [*[1,2,3] ...

  3. python中的解包操作

    在看别人写的python代码的时候,有时候会看到在变量前面加上一个*或者是**,上网找了一下相关的资料发现这些星号原来是python中的解包操作,相当于将一个容器中的元素取出来然后分配给不同的变量,下 ...

  4. Python中的解包

    一.解包,英文名字叫UNPACKING,就是讲容器中所有的元素逐个取出来. python中解包是自动完成的,例如: a,b,c = ['1','2','3'] print(a,b,c) 1 2 3 除 ...

  5. python中序列解包_Python3 序列解包

    转载自:https://blog.csdn.net/yilovexing/article/details/80576788 序列解包是 Python 3.0 之后才有的语法 什么是序列解包呢?先看一个 ...

  6. python解包什么意思_python解包用法详解

    对于一堆资料,我们可以把它分给不同的人使用,这个分散的过程,我们可以看成是解包方法是实现.当然实际python解包的使用会相对复杂一点,我们会对常见的列表.函数等进行操作.下面我们就Python解包的 ...

  7. python的继承用法_【后端开发】python中继承有什么用法?python继承的用法详解

    本篇文章给大家带来的内容是关于python中继承有什么用法?python继承的用法详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 面向对象三大特征 1.封装:根据职责将属性和方法 ...

  8. python中index函数_详解python中的index函数用法

    1.函数的创建 def fun(): #定义 print('hellow') #函数的执行代码 retrun 1 #返回值 fun() #执行函数 2.函数的参数 普通参数 :要按照顺序输入参数 de ...

  9. python中heapq的库是什么_详解Python中heapq模块的用法

    详解Python中heapq模块的用法 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  详解Python中heapq模块的用法.txt ] (友情提示:右键点上行t ...

最新文章

  1. java操作elasticsearch实现query String
  2. linux下C语言套接字编程sockaddr和sockaddr_in的区别
  3. Spring Boot与Web开发简介||SpringBoot对静态资源的映射规则
  4. ACM入门之【线性筛】
  5. 大道至简第一章阅读笔记
  6. truffle unbox react 出坑指南
  7. 关于BigInteger的加减乘除使用
  8. T-SQL Optimization Tips (3): SELECT COUNT(*)
  9. 梯度下降法(Gradient Descent)初识
  10. 政府大数据应用案例,政府大数据治理方法
  11. Endnote导出GB/T 7714-2015 格式参考文献
  12. oracle solaris翻译,详解Oracle云操作系统Solaris 11.2
  13. 【问天Block】STC15单片机PWM输出讲解
  14. 基于Java的商城购物系统
  15. 2022年高新技术企业认定的补贴有多少?
  16. spring-boot 修改启动图标
  17. 嵌入式之linux用户空间与内核空间,进程上下文与中断上下文
  18. 工欲善其事,必先利其器——Python及其IDE安装
  19. Feign的hystrix熔断器不起作用
  20. MySql基本查询、连接查询、子查询、正则表达查询讲解

热门文章

  1. 天翼文化参展深圳文博会 冒险大作《海盗鬼皮书》引热捧
  2. win7 IIS7.0 【IIS 管理器无法验证此内置帐户是否有访问权】
  3. linux系统基础知识学习笔记
  4. .NetCore框架Surging系列(六)路由发现
  5. python爬虫-世界今日疫情爬虫
  6. 图片编辑工具哪个好?好用的图片编辑工具介绍
  7. TokenInsight对话首席——褪去浮华归本真!2020公链自主创新突破之路
  8. js点击轮播或者自动轮播图代码
  9. wangeditor富文本编辑器使用过程中遇到的问题以及解决办法
  10. 【R语言实例】物种分布模型介绍