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 结构匹配
相关推荐
caoerzhong3 小时前
JeeWMS 开源仓库管理系统权限与域验证解析:Java WMS 如何把数据权限管到仓、货主与人
java·python·开源·vue
一木 之林3 小时前
Miniconda 安装与 Jupyter 使用入门
ide·python·jupyter
君顾13 小时前
西安 24 小时自助健身房系统开发实战指南
java·开发语言·健身房
抓不住时间的沙3 小时前
Butterfly主题 5.7 导航栏添加相册同时设置相册入口密码
css·python·node.js
风合星语3 小时前
2026 机器人工程实例(五):让 Allegro Hand 在 MuJoCo 中完成接触抓取——抓取状态机、稳定抬升与受控释放
c++·python·机器人·仿真
小羊没烦恼!3 小时前
Memory 记忆设计讨论:Agent Memory 的数据模型可以怎么设计
java·开发语言·前端·c++·c#
程序猿编码4 小时前
两张 3090 扛 27B:Qwen3.8-27B 大模型 DFlash2 加速版生产级落地
开发语言·gpt·深度学习·神经网络·大模型·qwen
welfare9624 小时前
新号别搞:内存管理+模板初阶+STL简介
开发语言·c++
隐擎fox4 小时前
解构无感人机验证底层机制:行为生物轨迹采样、环境评分模型与自动化对抗实战
自动化测试·python·网络协议·tcp/ip·网络爬虫
敲代码的瓦龙4 小时前
Jetpack?ViewModel!!!
android·开发语言·kotlin·android-studio