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 结构匹配
相关推荐
沧海一笑-dj7 分钟前
【Python】Python学习笔记-模块与包
python·pip·模块·包·python包·python模块·包与模块
echome88817 分钟前
Python 异常处理:try、else、finally 的正确搭配
开发语言·前端·python·异常处理·编程技巧
云和数据.ChenGuang18 分钟前
Python 单继承与多继承深度剖析:从 MRO 到实战取舍
开发语言·人工智能·python·langchain
威哥爱编程20 分钟前
Python 智能体开发实战 02:你的 AI 助教说话像换了个模型?九成的 system prompt 都写错了
python·agent
威哥爱编程20 分钟前
Python 智能体开发实战 01:装了三遍环境还在报错?虚拟环境和 DeepSeek 一次配到位
python·agent
小咕聊编程1 小时前
基于Python的豆瓣电影数据可视化系统构建分析
开发语言·python·信息可视化
小小张说故事2 小时前
Python 的 dict 为什么查询是 O(1)?拆开哈希表、扰动函数与扩容阈值
python
脏脏a3 小时前
延迟与画质:远程控制的生命线
开发语言·php
像风一样的男人@3 小时前
python --基于scp的文件传输助手
开发语言·python
一条破秋裤3 小时前
SDIO Wi‑Fi 设备的驱动向insmod + 反向rmmod
开发语言·php