Python 变量组包、解包及星号扩展机制详解

一、组包(Packing)

👉 把多个值"打包"成一个整体(通常是元组)

python 复制代码
a = 1, 2, 3
print(a)

输出:

复制代码
(1, 2, 3)

注意:

不是括号决定元组,而是逗号

python 复制代码
a = (1, 2, 3)   # 推荐写法

函数返回多个值(本质是组包)

python 复制代码
def func():
    return 1, 2

实际上等价于:

python 复制代码
return (1, 2)

二、解包(Unpacking)

👉 把一个整体拆成多个变量

python 复制代码
a, b = 1, 2

等价于:

python 复制代码
a, b = (1, 2)

解包列表

python 复制代码
nums = [10, 20]
x, y = nums

解包字符串

python 复制代码
a, b, c = "abc"

三、星号解包(重点)

这是进阶用法。

1️⃣ 收集剩余元素

python 复制代码
a, *b = [1, 2, 3, 4]

结果:

复制代码
a = 1
b = [2, 3, 4]

python 复制代码
a, *b, c = [1, 2, 3, 4, 5]
复制代码
a = 1
b = [2, 3, 4]
c = 5

2️⃣ 函数参数解包

python 复制代码
def add(a, b, c):
    print(a + b + c)

nums = [1, 2, 3]
add(*nums)

* 把列表拆开传入。


3️⃣ 字典解包

python 复制代码
def greet(name, age):
    print(name, age)

d = {"name": "Tom", "age": 18}
greet(**d)

** 解包字典。


四、可变参数(也是组包)

*args

python 复制代码
def func(*args):
    print(args)

调用:

python 复制代码
func(1, 2, 3)

输出:

复制代码
(1, 2, 3)

👉 本质:组包成元组


**kwargs

python 复制代码
def func(**kwargs):
    print(kwargs)

调用:

python 复制代码
func(name="Tom", age=18)

输出:

复制代码
{'name': 'Tom', 'age': 18}

👉 本质:组包成字典


五、扩展解包(Python 3.5+)

合并列表

python 复制代码
a = [1, 2]
b = [3, 4]

c = [*a, *b]

合并字典

python 复制代码
d1 = {"a": 1}
d2 = {"b": 2}

d = {**d1, **d2}

六、还有哪些相关概念?

1️⃣ 交换变量(本质是解包)

python 复制代码
a, b = b, a

2️⃣ 忽略变量

python 复制代码
a, _, c = (1, 2, 3)

3️⃣ enumerate 解包

python 复制代码
for i, value in enumerate([10, 20, 30]):
    print(i, value)

4️⃣ zip 解包

python 复制代码
names = ["a", "b"]
scores = [90, 80]

for name, score in zip(names, scores):
    print(name, score)

七、和 match(3.10+)的关系

在 Python 3.10 的 match 语句里,也支持结构解包:

python 复制代码
match (1, 2):
    case (a, b):
        print(a, b)

八、总结结构图

复制代码
组包
 ├─ 元组自动组包
 ├─ 函数 return
 ├─ *args
 └─ **kwargs

解包
 ├─ 变量赋值
 ├─ for 循环
 ├─ 函数调用 *
 ├─ 字典调用 **
 ├─ 星号收集 *
 └─ match 结构匹配
相关推荐
千寻girling27 分钟前
一份不可多得的 《 Django 》 零基础入门教程
后端·python·面试
databook4 小时前
探索视觉的边界:用 Manim 重现有趣的知觉错觉
python·动效
明月_清风5 小时前
Python 性能微观世界:列表推导式 vs for 循环
后端·python
明月_清风5 小时前
Python 性能翻身仗:从 O(n) 到 O(1) 的工程实践
后端·python
helloweilei21 小时前
python 抽象基类
python
用户83562907805121 小时前
Python 实现 PPT 转 HTML
后端·python
zone77391 天前
004:RAG 入门-LangChain读取PDF
后端·python·面试
zone77391 天前
005:RAG 入门-LangChain读取表格数据
后端·python·agent
树獭非懒2 天前
AI大模型小白手册|Embedding 与向量数据库
后端·python·llm
唐叔在学习2 天前
就算没有服务器,我照样能够同步数据
后端·python·程序员