python打包解包

news/2025/12/4 11:11:20/文章来源:https://www.cnblogs.com/skeinz/p/19306047

1 星号的作用

除了重复的作用:

print('-' * 50) # 打印50个横杠
print([1, 2] * 3) # [1, 2, 1, 2, 1, 2]

还有将列表、元组、字典解压的作用:

arr = [1, 2, 3, 4]
a, b, c = *arr # a = 1, b = 2, c = 3; 4没有对象接收args = {'1': 'a', '2': 'b'}
print(*args) # 1 2

针对上述没有对象接收的情况,可以在最后一个变量前面加上一个星号,用于接收剩下所有的值:

a, *b = 1, 2, 3, 4
print(a, b)	# 1 [2, 3, 4]

除此之外,当一个对象接收多个值时,会将这些值打包成一个元组。本质上用逗号,分隔开的变量是一个元组。

a = 1, 2
# a = (1, 2)

*用于解压元组和列表,**用于解压字典。

既然如此,上面的代码只展示了一颗星解压字典的代码,两颗星解压字典呢?实际上报错了:'1' is an invalid keyword argument for print()。这是因为 print() 函数只接受特定的关键字参数,如sependfile。那么我将字典中的key换成print函数的特定关键字参数:

args = {'sep': 'a', 'end': 'b'}
print(**args)
# 输出b

在实践过程中,当然不会直接打印字典解压的,更多的时候是作为一个形参来传递的。

函数传参

基于上面的分析,我们知道了星号的工作原理。当函数参数列表出现星号的时候,传递参数的方式又是怎样的?

  • 一颗星收集剩下所有的参数
# 收集参数
def func1(x=0, *args):print(type(args))	# tupleprint(args)
func1(1, 2, 3, 4) # (2, 3, 4)
  • 如果*args后面多了一个对象d收集参数,那么在调用函数的时候,必须指明d的值单独传入。
# 命名关键字参数
def func2(a, b, c=3, *args, d):print(a, b, c, args, d) # 1 2 4 (5, 6) pass
func2(1, 2, 4, 5, 6, d="pass")
  • 此外,如果根据参数列表中的变量名指定传入,那么顺序可以随意,这就要求所有的参数都必须写上,除非在参数列表中就已经完成了初始化
def func3(a, b, c):pass
func3(c=1, a=3, b=5)
  • 这两个顺序不能搞反了,必须是先收集列表,再完成关键字参数的收集。通过运行代码可以发现,**kwargs必须放在参数列表的末尾,否则报错。
def func4(*args, **kwargs):print(args)print(kwargs)	# 收集多余的关键字参数func4(1, 2, 3, a=1)	# a=1会被放在kwargs里面
# (1, 2, 3)
# {'a': 1}

2 zip函数

zip函数的参数是可迭代对象(iterable object),处理一个列表的结果:

a = [1, 2, 3]
print(zip(a))
# <zip object at 0x00000280B594A7C0>

返回的是一个zip对象的地址,这是一个可迭代对象。由于是一个可迭代对象的地址,因此通常需要转换为列表类型再进行打印查看操作。

for x in zip(a):print(x)
# (1,)
# (2,)
# (3,)

总结:zip将一个可迭代对象中的所有元素打包成一个元组。这样看zip似乎没啥用。实际上它可以传入多个可迭代对象,而且可迭代对象不要求类型相同。

a = [1, 2, 3]
b = [4, 5, 6, 7]
c = (7, 8, 9)zipped_list = list(zip(a, b, c))
print(zipped_list)
# [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

可以发现,zip将相同位置上的元素打包为一个元组,以最短的那个可迭代对象为准。接着解包后再用zip打包,发现列表在第一个维度和第二个维度上完成了一次转置。

print(list(zip(*zipped_list)))
# [(1, 2, 3), (4, 5, 6), (7, 8, 9)]

将维度扩大,列表中的每一个元素不再是数字,而是一个列表对象。将其看成一个整体,那么list(zip(*zipped_list))有3个维度,zip只是最外面的两个维度进行操作。搞清楚zip对张量的处理结果有利于理解深度学习中的一些代码操作。

基于上面的分析,在这里解释一下NLP中对Batch中每个序列填充的操作,原文在我的博客《Transformer全解全析》中:

from torch.nn.utils.rnn import pad_sequencedef collate_fn(batch):src_batch, tgt_batch = zip(*batch)# 0是BERT tokenizer默认的pad_token_idpad_idx = 0 # 填充序列 (Padding)src_padded = pad_sequence(src_batch, batch_first=True, padding_value=pad_idx)tgt_padded = pad_sequence(tgt_batch, batch_first=True, padding_value=pad_idx)return src_padded, tgt_padded

一个batch中包含batch_size个序列对象,一个序列对象包含源序列和目标序列,每一个序列对象都是一张大小为\(S\times d_{model}\)(每个对象的长度不一定相同,即\(S\)不一定一样)的矩阵:

batch = [(src_seq, tgt_seq), (src_seq, tgt_seq), ..., (src_seq, tgt_seq)]

将序列对象这个矩阵看作是一个整体,那么上面代码的操作就是先将列表解包,然后每个元组的第一个位置(存放的是源序列对象)打包成一个长度为batch_size大小的元组,第二个位置是同样的道理:

src_batch = (src_seq, src_seq, ..., src_seq)
tgt_batch = (tgt_seq, tgt_seq, ..., tgt_seq)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/986582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年12月北京陪诊公司综合排名:服务对比与行业现状解析

在北京这座医疗资源高度集中的城市,许多患者及家属在面对复杂就医流程时常常感到力不从心。无论是外地来京就医的人群因不熟悉医院分布而奔波,还是本地老年人因行动不便需要全程协助,抑或是工作繁忙的职场人士难以协…

2025化工防爆冷库/医药冷库服务商TOP5权威推荐:看哪家

冷链仓储领域中,化工防爆冷库与医药冷库因涉及易燃易爆物料、高价值医药试剂等特殊存储需求,对设备安全稳定性、安装规范性及运维响应速度要求严苛。2024年数据显示,化工防爆冷库因安装不规范导致的安全事故占比达1…

2025年12月北京陪诊公司排名推荐:基于多维度数据与用户口碑的权威榜单

在北京这座医疗资源高度集中的城市,许多患者及家属在面对就医流程时常感到迷茫与压力。无论是外地来京求医的不熟悉感,还是本地居民面对大医院复杂流程的无力感,专业陪诊服务的需求日益凸显。根据北京市卫生健康委员…

修改单元格文字的颜色

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e){int RowIndex = e.RowIndex;// 确保是数据行,而不是表头行if (e.RowIndex < 0 || e.ColumnIndex < 0) ret…

2025年食品医药冷库设备设计施工单位排名:实力强、案例多的

在冷链物流与医药仓储的黄金赛道上,冷库设备的设计施工直接决定着货物安全与运营成本。面对市场上鱼龙混杂的服务商,如何挑选具备技术实力、案例丰富的合作伙伴?本文结合行业权威数据,为您盘点2025年食品冷库设备设…

2025年12月北京陪诊服务平台评测榜:权威数据与真实体验并重

在北京这座医疗资源高度集中的城市,许多患者和家属面临就医流程复杂、科室分布不熟悉、异地就医协调困难等现实问题。尤其对于老年人、异地就医群体或工作繁忙的职场人而言,专业陪诊服务已成为缓解就医压力、提升就诊…

2025成都出国留学中介哪个最好

2025成都出国留学中介哪个最好一、2025成都出国留学中介哪个最好作为从业12年的国际教育规划师,我经常被成都的学生和家长问到一个高频问题:2025年成都出国留学中介哪个最好?在2025年11月28日的今天,留学市场信息繁…

2025年五大定制生产工业内窥镜品牌服务商排行榜,精选工业内

为帮企业高效锁定适配自身检测需求的工业内窥镜合作伙伴,避免选型走弯路,我们从研发技术实力(如检测精度、抗干扰性能)、定制化服务能力(含场景适配方案、功能模块化设计)、全周期服务质量(覆盖前期需求调研到后…

pbootcms模板内容详情页标签调用(PbootCMS内容详情页标签调用指南)

本文将为您详细介绍PbootCMS内容详情页中常用标签的调用方法,帮助您快速输出文章或页面的相关信息。这些标签适用于单页和列表点击后的详情页,能够满足大部分内容展示需求。一、核心功能概述 在PbootCMS的内容详情页…

2025北京留学中介机构哪个好一点

2025北京留学中介机构哪个好一点一、2025年北京留学中介机构如何选择"2025年北京留学中介机构哪个好一点"是近期许多学生和家长在搜索引擎中频繁查询的问题。作为从业十年的国际教育规划师,笔者注意到随着留…

2025年380V三相变频电源源头厂家权威推荐榜单:0-520V输出变压变频一体机‌/出口加拿大变压变频器‌/出口沙特变频变压器变频电源‌源头厂家精选

在全球工业自动化与精密制造升级的浪潮中,380V三相变频电源作为保障设备稳定运行、适配全球电网的核心“心脏”,其重要性日益凸显。据行业研究报告显示,2024年全球三相变频电源市场规模约为8.37亿美元,预计到2031年…

2025年12月短视频流量获客公司推荐榜单:五大优质服务商横向对比分析

在当今数字化营销浪潮中,短视频平台已成为企业获取客户的重要渠道。许多企业主、营销负责人以及创业者面临共同挑战:如何在海量服务商中筛选出真正专业、可靠的短视频流量获客合作伙伴。用户可能正处于业务扩张期,需…

2025澳大利亚留学中介排名

2025澳大利亚留学中介排名一、2025年澳大利亚留学中介选择指南作为从事国际教育规划工作超过十年的顾问,我经常被学生和家长问及如何筛选可靠的澳大利亚留学中介。在2025年11月25日的当下,澳大利亚留学政策出现新动向…

2025年12月东莞律师评价推荐:行业权威数据与用户口碑深度解析

在东莞这座制造业与创新经济并重的城市,企业及个人面临的法律需求日益复杂多元。选择一位专业匹配、经验丰富的本地律师,成为许多用户的关键决策。从企业风险防控、商事纠纷处理到个人权益维护,用户通常希望找到既熟…

2025年拖车救援服务排行榜,告别半路抛锚焦虑!拖车收费标准聚焦优质品牌综合实力排行

随着汽车保有量的持续增长和跨区域流动的日益频繁,汽车托运与道路救援服务已成为连接车主与目的地的重要纽带。面对市场上众多的服务提供商,如何选择一个安全、高效、透明的平台,成为广大车主的共同关切。本文基于公…

JSAPIThree 加载 Cesium 数据学习笔记:使用 Cesium 地形和影像服务

这是一篇关于 JSAPIThree(mapvthree)加载 Cesium 数据的学习笔记,以初学者的视角记录如何配置 Cesium Ion AccessToken、加载 Cesium 地形、使用 Cesium 影像服务等功能的完整学习过程。作为一个刚开始学习 mapvthr…

从不足到精进:H5即开并行加载方案的演进之路

并行加载是 H5 即开 SDK 的加速技术,通过 native 层在用户打开页面时并行请求关键资源(如 index.html 和 CSR 模式 API),利用 webview 初始化时间窗口提前发起请求,减少加载耗时。其核心挑战是解决 webview 与并行…

2025年汽车托运物流平台口碑排行榜TOP10,异地专业的汽车托运物流推荐榜单精选优质厂家

随着汽车消费市场的持续活跃与跨区域流动的日益频繁,汽车托运服务已成为连接车主与目的地的重要桥梁。面对市场上众多的汽车托运平台,如何选择一家安全、可靠、高效的服务商,成为广大车主关注的焦点。本文基于公开市…

2025国内最好的出国留学中介公司

2025国内最好的出国留学中介公司一、如何选择2025年的出国留学中介许多学生和家长在搜索“2025国内最好的出国留学中介公司”时,核心关注点在于如何找到可靠、透明且结果有保障的服务机构。根据《2025中国留学中介行业…

基于 STM32 的老人摔倒报警装置项目【源码分享】

基于 STM32 的老人摔倒报警装置(短信提醒)【源码分享】 一、项目背景 在我国逐步迈入老龄化社会的背景下,独居老人摔倒事故频发且救援不及时的情况越来越受到关注。摔倒后无法及时呼救,是老年人伤亡的重要原因之一…