Fork me on GitHub

【进阶11】【自学笔记】Python解包系列操作

一、Python解包定义

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

二、解包实例

1、最简单的解包

1
2
3
4
5
6
7
a, b, c = [1, 2, 3]
 
print(a, b, c)
 
 
# 输出结果
1 2 3

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

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

太多值无法解包

2、元组解包

1
2
3
4
5
6
7
>>> a,b,c = (1,2,3)
>>> a
1
>>> b
2
>>> c
3

3、字符串解包

1
2
3
4
5
6
7
>>> a,b,c = "abc"
>>> a
'a'
>>> b
'b'
>>> c
'c'

4、集合解包

1
2
3
4
5
6
7
8
>>> a,b,c = {1,2,3}
>>> a
1
>>> b
2
>>> c
<strong>3
</strong>

5、字典解包

1
2
3
4
5
6
7
>>> a,b,c = {"a":1, "b":2, "c":3}
>>> a
'a'
>>> b
'b'
>>> c
'c'

6、多变量赋值

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

7、生成器解包

1
2
3
4
5
6
7
# 生成器
a, b, c = (x + 1 for x in range(3))
print(a, b, c)
 
 
# 输出结果
1 2 3

8、函数参数解包

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

解包小栗子一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 函数
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

解包小栗子二

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 函数
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 表达式解包
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:拼接列表

1
2
3
4
5
6
7
8
9
# 解包拼接列表
list1 = [1, 2]
list2 = range(3, 5)
list3 = [*list1, *list2]
print(list3)
 
 
# 输出结果
[1, 2, 3, 4]

示例03:拼接两个字典

1
2
3
4
5
6
7
8
9
# 解包拼接字典
dict1 = {"a": 1, "b": 2}
dict2 = {"name": "yy", "age": 22}
dict3 = {**dict1, **dict2}
print(dict3)
 
 
# 输出结果
{'a': 1, 'b': 2, 'name': 'yy', 'age': 22}

解包总结

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

 

posted @   橘子偏爱橙子  阅读(291)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
历史上的今天:
2022-04-07 【测试理论-04】软件测试基本流程和bug缺陷级别分类
2022-04-07 【测试理论-03】常用功能测试用例设计的方法总结
点击右上角即可分享
微信分享提示