首页 > 编程语言 >【进阶11】【自学笔记】Python _解包的操作

【进阶11】【自学笔记】Python _解包的操作

时间:2023-04-07 22:55:43浏览次数:37  
标签:11 输出 进阶 迭代 解包 test range print

一、Python解包定义

Python解包是指将一个可迭代对象(如列表、元组、字典等)中的元素分别赋值给多个变量的过程。
解包可以通过在变量前添加星号 `*` 来实现,也可以通过在变量前添加双星号 `**` 来实现字典解包。解包可以简化代码,使代码更加清晰易懂。

二、解包实例

1、最简单的解包

a, b, c = [1, 2, 3]

print(a, b, c)


# 输出结果
1 2 3 

列表有 3 个元素,此时也需要 3 个变量去接,否则会报错  

a, b = [1, 2, 3]


# 输出结果
    a, b = [1, 2, 3]
ValueError: too many values to unpack (expected 2)

太多值无法解包

2、元组解包

>>> a,b,c = (1,2,3)
>>> a
1
>>> b
2
>>> c
3

3、字符串解包

>>> a,b,c = "abc"
>>> a
'a'
>>> b
'b'
>>> c
'c'

4、集合解包

>>> a,b,c = {1,2,3}
>>> a
1
>>> b
2
>>> c
3

5、字典解包

>>> a,b,c = {"a":1, "b":2, "c":3}
>>> a
'a'
>>> b
'b'
>>> c
'c'

6、多变量赋值

>>> a, b = 1, 2
>>> a
1
>>> b
2
  • 其实也是元组解包
  • 元组在 = 右边的时候,可以忽略 ( )

7、生成器解包

# 生成器
a, b, c = (x + 1 for x in range(3))
print(a, b, c)


# 输出结果
1 2 3 

8、函数参数解包

主要是可变参数、关键字参数  

解包小栗子一

# 函数
def test(a, b, c):
    print(a, b, c)


# 正常逐个传参
test(1, 2, 3)

# 只传一个可迭代对象,就需要解包
test(*[1, 2, 3])
test(*{1, 2, 3})
test(*(1, 2, 3))


# 输出结果
1 2 3
1 2 3
1 2 3
1 2 3

解包小栗子二

# 函数
def test(a, b, c):
    print(a, b, c)


# 关键字传参
test(a=1, b=2, c=3)

# 只传一个可迭代对象,就需要解包,和上面写法是等价的
test(**{"a": 1, "b": 2, "c": 3})


# 输出结果
1 2 3
1 2 3

9、在表达式中使用解包

示例01

# 表达式解包
print(range(3), 3)
print(*range(3), 3)

print([*range(3), 3])

print({"a": 1, **{"b": 2, "c": 3}})


# 输出结果
range(0, 3) 3
0 1 2 3
[0, 1, 2, 3]
{'a': 1, 'b': 2, 'c': 3}

示例02:拼接列表

# 解包拼接列表
list1 = [1, 2]
list2 = range(3, 5)
list3 = [*list1, *list2]
print(list3)


# 输出结果
[1, 2, 3, 4]

示例03:拼接两个字典

# 解包拼接字典
dict1 = {"a": 1, "b": 2}
dict2 = {"name": "yy", "age": 22}
dict3 = {**dict1, **dict2}
print(dict3)


# 输出结果
{'a': 1, 'b': 2, 'name': 'yy', 'age': 22}

解包总结

  • 自动解包支持一切可迭代对象
  • 函数调用时,可以用 * 或者 ** 解包可迭代对象

 

标签:11,输出,进阶,迭代,解包,test,range,print
From: https://www.cnblogs.com/xfbk/p/17297630.html

相关文章

  • 从 JDK 11-JDK 20,谁修复的 issue 数量最多?
    JDK/Java20已正式GA。根据Oracle披露的信息显示,在为JDK20修复的issue数量上,位列全球前五位的厂商分别为:甲骨文(Oracle)、红帽(RedHat)、思爱普(SAP)、ARM和腾讯(Tencent)。其中,来自国内的积极贡献厂商除腾讯外,还有阿里巴巴、华为和龙芯。“我们感谢许多审查提议更改的......
  • 从 JDK 11-JDK 20,谁修复的 issue 数量最多?
    JDK/Java20已正式GA。根据Oracle披露的信息显示,在为JDK20修复的issue数量上,位列全球前五位的厂商分别为:甲骨文(Oracle)、红帽(RedHat)、思爱普(SAP)、ARM和腾讯(Tencent)。其中,来自国内的积极贡献厂商除腾讯外,还有阿里巴巴、华为和龙芯。“我们感谢许多审查提议更改的......
  • 1139. 最大的以 1 为边界的正方形
    题目链接:1139.最大的以1为边界的正方形方法:二维数组前缀和解题思路假设以\((i,j)\)为左上角端点的正方形网格边长为\(d\),则该正方形的四条边\(up、down、left、right\)均为\(d\),两者为充分必要条件。根据二维前缀和运算可得:up=s[i][j+d]-s[i-1][j+d]-s[i......
  • 1138. 字母板上的路径
    题目链接:1138.字母板上的路径方法:模拟解题思路为了使得移动次数最小,每次移动方式为,"直角移动"(如下图),但由于\(z\)字母位置的特殊性,当其作为目标字母和当前字母时,为了避免越界问题,需要调整\(x\)和\(y\)方向上移动的顺序。代码classSolution{public:stringalph......
  • DLNA 共享多媒体电脑到电视(Win11)
    电脑设置1.win11系统,进入控制面板,进入“网络和Internet”  2.进入“网络和共享中心”  3.进入“媒体流式处理选项” 4. 点击允许  电视设置进入共享网络,不同电视位置不一样,但是一般都在设置里,然后选择我们的电脑,就可以查看图片、音乐、视频等内容......
  • 11. 盛最多水的容器
    题目链接:11.盛最多水的容器方法:相向双指针解题思路根据题目要求,\(2<=n<=10^5\),可知如果使用暴力求解,显然会超时。使用双指针算法可以大大缩短时间复杂度,取\([i,j]\)双指针,初始化为$i=0,j=n-1,i<j,$最大面积\(s=0;\)假设某时\(height[i]<=height[......
  • vmware中安装windows11系统
    1、官网下载windwos11镜像(点击跳转下载)  2、打开vmware,创建新的虚拟机3、选择典型方便快捷 4、选择安装程序光盘文件,点击浏览选择刚刚下载好的iso镜像5、选择windows版本号我的vmware是16版本没有windwos11选项直接选择最新windows10X64版本 6、命名存放位置根据自......
  • Java多版本切换 8-11-17
    Java版本切换在A:\DevEnvironment\javaVersion目录下,创建Windows命令脚本Java8.bat @echooff setJAVA_HOME=A:\DevEnvironment\jdk-1.80_152 setPath=%JAVA_HOME%\bin;%Path% echoVersionhasbeenswitchedtoJava8.Java11.bat @echooff setJAVA_HOME=A:\DevE......
  • leetcode-1109-差分
    classSolution{publicint[]corpFlightBookings(int[][]bookings,intn){int[]diff=newint[n];for(int[]booking:bookings){intfirst=booking[0],last=booking[1],seats=booking[2];diff[first-1]......
  • vue全家桶进阶之路29:Element Plus
    ElementPlus是一个用于Vue.js的UI组件库,为开发人员提供了一组可重用和可定制化的组件,用于构建现代Web应用程序。它是流行的ElementUI库的扩展,重点是提高性能和可访问性。ElementPlus包括广泛的组件,如按钮、表单、表格、对话框等。除了常规的UI组件外,ElementPlus还提供了一些......