python之打包、解包

Python--解包(Unpacking)一次搞定 解包是Python中一个非常强大且灵活的特性,它允许我们将序列或映射中的元素分解为单独的变量,从而简化代码并提高可读性。通过使用星号(*)和双星号(**),我们可以处理不确定长度的序列和字典解包。希望这些示例和解释能帮助学生更好地理解和掌握Python中的解包技术。在函数形参上使用星号()和双星号(**)可以让我们更灵活地处理不同类型的参数。单星号()用于收集位置参数,双星号(**)用于收集关键字参数。通过结合使用这两种形式,我们可以编写出更加通用和灵活的函数。 阅读详情

通俗解释:

打包:将多个物品装到一个盒子里

解包:将盒子里的物品放到不同袋子中

1、python自动实现可迭代对象的打包、解包

打包:多个以逗号分隔的值(可以是不同类型)赋给一个变量时,多个值会被打包成一个元组类型赋值给变量

解包:将可迭代对象中的元素依次赋值给多个变量,左侧变量数==可迭代对象的元素个数,否则会报ValueError

# 打包:python自动将元素打包成元祖
a = 1,2,3  # a为(1,2,3)

# 解包
x, y, z = a   # x=1,y=2,z=3
x, y, z = [1, 2, 3]    # x=1,y=2,z=3
x, y = {'a':1,'b':2}    # x=a,y=b 默认将字典的key赋值给变量
x, y = {'a':1,'b':2}.items()    # x=('a', 1) ,y=('b', 2)
x, y = 'hg'    # x=h,y=g
    
# 可迭代对象包含的元素和前面待赋值变量数量不一致,会报错
x, y = a  # 报错:ValueError: too many values to unpack (expected 2)   包里解压太多元素
x, y, z, o = a  # 报错:ValueError: not enough values to unpack (expected 6, got 5)  包里没有足够元素可以解压

2、*对可迭代对象进行打包/解包

# 打包
x, *y = [1, 'ttt', 66]
print(x,y)    # x=1,y=['ttt', 66]
x, *y = {'a':1,'b':2,'c':3}
print(x,y)    # x=a,y=['b', 'c']
x, *y = 'tykl'
print(x,y)    # x=t,y=['y', 'k', 'l']
x,*y = {1,'ysl','oo'}
print(x,y)    # x=ysl,y=[1, 'oo']
# 异常情况
*x = 1, 2 # 报错:SyntaxError: starred assignment target must be in a list or tuple
*x, = 1, 2 # x=[1, 2]


# 解包
# 元祖
a = (1, 2, 3)
print(*a) # 打印1 2 3
# 列表
b = [1, 2, 3]
print(*b) # 打印1 2 3
# 字典
c = {'a':1,'b':2}
print(*c) # 打印 a b
print(*c.values()) # 打印 1 2
print(*c.items())   # 打印 ('a', 1) ('b', 2)
# 集合
d = {1, 2, 2}
print(*d)  # 打印 1 2
# 字符串
e = '6yt1'
print(*e)  # 打印 6 y t 1 

print()函数只支持 *args,不支持 **kwargs

print(**c) 
# 报错:TypeError: 'a' is an invalid keyword argument for print()

3、打包、解包在函数中的应用

3.1 在函数定义时:使用 */** 收集元素进行打包,不限制传入参数的个数,分为2种:

  • *args:使用元祖获取传入的参数
  • ** kwargs:使用字典接收传入的 k=w 形式的关键字参数
def myfunc(*args, **kwargs):
    print(type(args),type(kwargs))
    print(args)
    print(kwargs)

myfunc(1, 2, 3, a=1, b=2)

执行结果:
<class 'tuple'> <class 'dict'>
(1, 2, 3)
{'a': 1, 'b': 2}

注意点:(1)python语法规定:*args参数需要放在 **kwargs参数前;(2)python语法规定:**kwargs关键字参数后不能有其他参数;(3)(参数1,*args,参数2)必须要求函数传递参数2,且参数2必须是关键字参数

def myfunc5(x, *args, y):
    print(f'x:{x}\nargs:{args}\ny:{y}')

myfunc5(7, 8, 9, 10, 11, y='aa')

执行结果:
x:7
args:(8, 9, 10, 11)
y:aa

3.2 在函数调用时,使用 */** 对参数进行解包

def myfunc2(x, y, z):
    print(x, y, z)

li = [1, 2, 3]
myfunc2(*li)

执行结果:
1 2 3
# 根据key值匹配函数的参数值,依次将value值传入函数中
def myfunc2(a, b, c):
    print(a, b, c)

dic = {'c':1, 'a':2, 'b':3}
myfunc2(**dic)  # 根据字典key将对应value值传入函数中,顺序不重要,但是key不能多不能少

执行结果:
2 3 1

3.3 组合使用

def myfunc3(x, *args, **kwargs):
    print(f'x:{x}\nargs:{args}\nkwargs:{kwargs}')
    pass

li = 'ysl', 99, 88
myfunc3(9, *li, a=9, **{'name':'ysl', 'age': 18})

执行结果:
x:9
args:('ysl', 99, 88)
kwargs:{'a': 9, 'name': 'ysl', 'age': 18}

3.4 函数返回:Return a,b,... ---->实际是返回元组(a, b, ...)

def myfunc4(a, b):
    a += 2
    b += 4
    return a,b

tmp = 1, 2
result = myfunc4(*tmp)
print(type(result))
print(result)

执行结果:
<class 'tuple'>
(3, 6)

有问题或补充欢迎留言

解包的艺术:Python 中简洁高效的数据拆解与赋值技巧!! 解包的艺术:Python 中简洁高效的数据拆解与赋值技巧 阅读详情

相关推荐

Python解包详解:序列、字典、函数调用与嵌套解包全解析

解包是Python中将可迭代对象元素按结构一次性赋值给多个变量的核心语法机制,本质是确定性数据拆解而非语法糖。其底层由CPython字节码(如UNPACK_SEQUENCE)直接支撑,具备零运行时开销和强类型校验特性。技术价值在于提升代码自文档性、强化结构一致性,并成为数据流处理的通用管道——尤其在API响应解析、CSV遍历、函数多返回值、配置注入等高频场景中不可替代。结合*和**操作符,它无缝衔接位置参数与关键字参数传递,支撑requests、pandas、numpy等生态模块的数据交换协议。本文深入剖析

weixin_29597551的博客 336

Python中的解包用法

Python中的解包用法

cnds123的专栏 6182

Python 元组:解构、打包与解包技巧

本文介绍了 Python 元组的基本概念以及解构、打包与解包技巧。

wjianwei666的专栏 706

python中的解包操作

在Python中,解包(unpacking)是一种将可迭代对象(如列表、元组、集合等)中的元素分解为单独变量的技巧。这个功能在多个场景下都非常有用,比如函数参数传递、迭代循环等。

weixin_44627292的博客 1458

步科触摸屏编程

1.首先官网上下载kinco软件,然后再安装驱动,安装的方式是需要两个文件。把两个文件放到driver文件夹下面,然后设备管理器右键更新,手选driver文件夹,自动安装即可。 步科触摸屏驱动文件下载地址 2.按照步科触摸屏使用手册一步一步来建立工程 Kinco HMIware使用手册下载地址 登录界面 涉及到的是页面切换,用的是login window,然后只留下等级输入那个

MAYBE的博客 2万+

手把手教你搭建一个属于自己的网站-适合零基础小白,文末附网站模板

手把手教你搭建一个属于自己的网站-适合零基础小白写在前面搭建需求功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 写在前面 前段时间休息想着搭一个属于自己的网站,几经尝试终于成功了,网上其实有很多教程,但很多,希望这篇文章能够帮助到

qq_46788925的博客 1万+

Python基础:元组的打包与解包操作详解

本文详细介绍了Python中元组的打包与解包操作。打包是将多个值组合成元组,解包则是将元组拆开赋给多个变量。解包不仅限于元组,列表、字符串等可迭代对象均可使用。文章重点讲解了标准解包、星号解包(*)和嵌套解包三种模式,并通过变量交换、并行遍历、数据分割等实际场景展示了解包的强大功能。解包操作使Python代码更加简洁优雅,是Python最具特色的语法特性之一。

输出倒逼输入,写作驱动成长。 3977

PIC单片机应用开发实践教程(二): 新建工程

File---New ProjectMicrochip Embedded --- Standalone Project 选择所用MCU对应型号 点击 Finish 后,工程就建好了 至止,我们的一个新工程就建完成了!

qq_57798018的博客 2888

Python - 参数打包与解包

背景/需求 设想这样一种情况:有一个列表,里面有四个元素;有一个函数,需要传入四个参数。那么我们可以直接将列表作为参数传入函数里面吗?当然不能。 # 参数打包解包在Python程序中的重要作用 # 定义一个函数,传入四个参数,打印出这四个参数 def fun(a, b, c, d): print(a, b, c, d) # 设置列表 my_list = [1, 2, 3, 4] # 直接传入列表,会提示报错 fun(my_list) Output: TypeError: fun() takes

qq_45293457的博客 3182

【STC32G12K128开发板】——从零到一:Keil C251开发环境全攻略

本文详细介绍了为STC32G12K128开发板搭建Keil C251开发环境的完整流程。从环境准备、软件安装、驱动配置到创建第一个工程并下载程序,提供了避坑指南和实用技巧,帮助开发者高效入门这款基于251内核的国产32位单片机开发。

weixin_29192141的博客 363

【深度学习】肺结节分割项目实战二:分割肺实质

在后续训练模型的时候如果直接使用原始的肺部CT图像,其中的非肺区域会对训练造成干扰,因此我们需要提取分割肺实质。这一部分参考了kaggle上的教程。 从这张CT图像中可以看出扫描器以外的部分为黑色,背景和肺内部颜色较深,非肺组织和骨头颜色较浅。我们的目的是将肺部分割出来。由于肺部区域和其他部分对比明显,我们可以设置一个合适的阈值对图像中的区域进行隔离。 import argparse import os import numpy as np from medpy.filter.smoothing imp

weixin_42182906的博客 7241

Python3 文件打包与解包

在做业务中有时候会遇到批量文件下载的功能,要批量下载需先将文件进行打包,这里介绍常用的 zip 和 tar 打包与解包 Python 中内置了打包的库,我们直接使用即可 zip #!/usr/bin/env python3 # -*- coding: UTF-8 -*- import zipfile # zip 打包 z = zipfile.ZipFile('black.zip', 'w')...

极客点儿 1838

H3C无线控制器二层注册实战:从零配置到AP上线全流程(附常见问题排查)

本文详细解析了H3C无线控制器二层注册的全流程,从网络基础准备、AC核心配置到AP上线,重点阐述了CAPWAP隧道建立的关键步骤。文章提供了清晰的典型配置示例,并针对AP无法上线、状态异常等常见问题,给出了六种典型故障现象的排查思路与解决命令,帮助网络工程师快速定位并解决问题。

weixin_29214199的博客 546

Python 打包与解包

右侧是列表/元组/字符串,左侧多个变量,Python自动拆解。解包:容器里的批量数据 → 拆开还原成一个个独立数据。定义函数:单星收位置打包元组,双星收关键字打包字典;调用传参:序列前面加星拆开传,字典双星打散关键字;打包:零散多个数据 → 收拢装进容器(元组为主)把列表/元组整体打散,拆成一个个独立位置参数。规则:变量数量 = 元素总数,否则报错。:接收一堆零散的位置参数,统一打包成。将字典键值对拆开,转为独立关键字参数。放在左边,接收多个元素,存入列表。接收零散关键字参数,打包成字典。

qq_51372804的博客 177

TensorRT量化实战教程:从PTQ到QAT,让你的模型推理速度飞起来

无论是PTQ的“快速落地”,还是QAT的“精度极致”,TensorRT量化技术都能成为你模型部署路上的“性能引擎”。通过本教程的实战项目,你已掌握从技术原理到工程落地的全流程能力——现在,不妨将你的模型代入其中,亲眼见证它在速度与精度的双重提升中“焕发生机”。若你在实操中遇到任何卡点,随时可以针对具体问题交流,我会尽全力帮你突破量化部署的每一个瓶颈。

FJN110的博客 239

基于STM32的多传感器融合的设施农业小型搬运机器人避障控制系统设计

针对设施农业场景中狭窄通道、障碍物多样(如农机具、作物植株、水管)的特点,设计一款基于 STM32 的小型搬运机器人避障控制系统。系统通过多传感器融合实现 360° 环境感知,采用模糊 PID 控制算法实现平滑避障,满足温室、大棚等场景的搬运需求。通过在温室环境测试,系统可实现对直径≥5cm 障碍物的有效检测(检测距离误差≤5%),避障转向半径≤30cm,平均功耗≤15W。后续可通过增加激光雷达(如 TFmini)提升远距离障碍物检测能力,结合 SLAM 算法实现路径规划。

weixin_42300449的博客 860

python list tuple 打包 解包_python的打包与解包

python的*与**,在函数的定义与调用过程中,有着不同的作用打包参数:一、函数定义时,形参前加*号(如:*args):收集实参中所有的位置参数,打包成新元组并将该元组赋值给args变量实参位置参数:实参中所有不带形参名的参数均是位置参数(如实参传递:a, b, 1)示例:二、函数定义时,形参前带**号(如:**kwargs):收集实参中的所有关键字参数,打包成新字典并将该字典赋值给kwargs...

weixin_39657249的博客 1420

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

python之打包与解包,*与**的用法解析

无论打包或解包,*操作的是一个序列,**操作的是一个字典,分别有很多不同的应用,*还兼具重复的功能。

橙色小博的博客,励志在人工智能领域发光发热! 609

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

python 网络数据流打包与解包

详细文章请参考: https://blog.youkuaiyun.com/youand_me/article/details/78890316 这个模块处理python中常见类型数据和Python bytes之间转换。这可用于处理存储在文件或网络连接中的bytes数据以及其他来源。在python中没有专门处理字节的数据类型,建立字节型数据也比较麻烦,我们知道的bytes()函数也只能对无符号整型做处理,并且...

Dream home 4213

Python形参打包与解包小技巧

Python形参打包与解包小技巧Python中的函数调用与c++不同的是将this指针直接作为self当作第一个形参进行处理,从而将静态函数与实例方法的调用形式统一了起来。在实际编程过程中,可以通过传递函数的地址、函数的形参的方式将所有函数(包括静态函数、类实例函数)的调用用统一的方式表达出来,方便统一接口和抽象。待传递的2个函数如下:class Operation: @staticmetho

BetterWorld的专栏 6224

python中的参数解包和重打包详解

在Python中,参数的解包与重打包是指将一个可迭代对象(如列表、元组、字典)的元素或键值对展开或收集到函数的参数列表中的过程。具体来说,这包括通过使用和**操作符将参数展开为位置参数和关键字参数,以及将多个位置参数或关键字参数收集到单个参数中。

weixin_47987343的博客 623

Python 打包解包/Map/Lambda表达式的问题

不太熟悉Python的匿名函数用法,这里做一个小节; 解包/打包: 以前没见过这种用法,主要是用于可变参数列表的情况下使用; ...

m0_66776925的博客 426

Python中 * 与 ** 的妙用(打包与解包)

easy,但是当我想要相加的数字有点多,我的形参需要很多吗?这就需要星号发挥作用了如你所见,无论传入多少参数,在形参前面加一个 * 就可以将传入的参数自行打包成一个元组或列表。

Hard_Liquor的博客 316

【Python】*args,**kwargs 及打包、解包

*把传入的一系列键值变量打包成一个字典,存入变量 kwargs。然后将 "aaa", a, *b 打包作为 args,x=111, y="bbb", **d 打包作为 kwargs,args 和 kwargs 分别为元组和字典;函数调用时,*和**表示解包。*args表示可以传入任意数量的“值变量”,**kwargs表示可以传入任意数量的键值变量。print可以传入*args参数,但无法传入**kwargs,需要使用.format()首先 *b 和 **d 对 b 和 d 解包,打散成元素和键值;

m0_53127772的博客 816

python通讯和文件打包解包之struct

格式化字符串当打包或者解包的时,需要按照特定的方式来打包或者解包.该方式就是格式化字符串,它指定了数据类型,除此之外,还有用于控制字节顺序、大小和对齐方式的特殊字符.对齐方式为了同c中的结构体交换数据,还要考虑c或c++编译器使用了字节对齐,通常是以4个字节为单位的32位系统,故而struct根据本地机器字节顺序转换.可以用格式中的第一个字符来改变对齐方式.定义如下。

weixin_44245323的博客 1511
上一篇: windows server2016 修改用户密码提示“密码不符合策略要求”
下一篇: vscode使用-设置自动换行
桑Ti
博客等级 码龄10年 12粉丝 12原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值