人生苦短,快学Python!

关于赋值、打包和解包这 3个概念,我觉得有必要做一个分享,因为很多朋友确实不清楚。

如果有这样一个元组t:

>> t = ('foo', 'bar', 'baz', 'qux')

发生这种情况时,就好像元组中的项目已被“打包”到对象中。我们可以通过索引,获取其中的元素。

>>> t
('foo', 'bar', 'baz', 'qux')
>>> t[0]
'foo'
>>> t[-1]
'qux'

如果随后将该“打包”对象分配给新元组,则各个项目将“解包”到元组中的对象中。我们来演示一下:

>>> (s1, s2, s3, s4) = t
>>> s1
'foo'
>>> s2
'bar'
>>> s3
'baz'
>>> s4
'qux'

解包时,左侧的变量数必须与元组中的值数相匹配,否则会报错。

>>> (s1, s2, s3) = t
Traceback (most recent call last):File "<pyshell#16>", line 1, in <module>(s1, s2, s3) = t
ValueError: too many values to unpack (expected 3)>>> (s1, s2, s3, s4, s5) = t
Traceback (most recent call last):File "<pyshell#17>", line 1, in <module>(s1, s2, s3, s4, s5) = t
ValueError: not enough values to unpack (expected 5, got 4)

打包和解包,也可以合并为一个语句以进行复合赋值。

>>> (s1, s2, s3, s4) = ('foo', 'bar', 'baz', 'qux')
>>> s1
'foo'
>>> s2
'bar'
>>> s3
'baz'
>>> s4
'qux'

同样,赋值左侧元组中的元素数量必须等于右侧的数量。

>>> (s1, s2, s3, s4, s5) = ('foo', 'bar', 'baz', 'qux')
Traceback (most recent call last):File "<pyshell#63>", line 1, in <module>(s1, s2, s3, s4, s5) = ('foo', 'bar', 'baz', 'qux')
ValueError: not enough values to unpack (expected 5, got 4)

在像这样的赋值和少数其他情况下,Python允许省略通常用于表示元组的括号。

>>> t = 1, 2, 3
>>> t
(1, 2, 3)>>> x1, x2, x3 = t
>>> x1, x2, x3
(1, 2, 3)>>> x1, x2, x3 = 4, 5, 6
>>> x1, x2, x3
(4, 5, 6)>>> t = 2,
>>> t
(2,)

编程时经常有两个变量需要交换其值。在大多数编程语言中,有必要在交换发生时将其中一个值存储在临时变量中,如下所示:

>>> a = 'foo'
>>> b = 'bar'
>>> a, b
('foo', 'bar')>>> temp = a
>>> a = b
>>> b = temp>>> a, b
('bar', 'foo')

在 Python 中,交换可以通过单个元组赋值来完成。

>>> a = 'foo'
>>> b = 'bar'
>>> a, b
('foo', 'bar')>>> a, b = b, a>>> a, b
('bar', 'foo')

这种操作语法足够精简,是Java等语言,无法比拟的。

各位伙伴们好,詹帅本帅搭建了一个个人博客和小程序,汇集各种干货和资源,也方便大家阅读,感兴趣的小伙伴请移步小程序体验一下哦!(欢迎提建议)

推荐阅读

牛逼!Python常用数据类型的基本操作(长文系列第①篇)

牛逼!Python的判断、循环和各种表达式(长文系列第②篇)

牛逼!Python函数和文件操作(长文系列第③篇)

牛逼!Python错误、异常和模块(长文系列第④篇)

Python赋值、打包和解包,90%人不清楚的知识点!相关推荐

  1. Python从入门到实践:打包和解包(*和**)的使用

    目录 一.打包参数 二.解包参数 三.几点注意 *和**在函数的定义和调用阶段,有着不同的功能,并且,*和**不能离开函数使用! 一.打包参数 * 的作用:在函数定义中,收集所有位置参数到一个新的元组 ...

  2. python基础第五课--从字符串中打包和解包大整数(小白piao分享)

    #4.从字符串打包和解包大整数 #将一个字符串解包成一个大整数,将一个大整数打包成一个字符串 #4.1 解决方案: #假设程序需要处理一个有16个元素的字节串,其中保存着一个128位的大整数 data ...

  3. rtp h264打包和解包

    1.学习思路 在了解rtp对h264数据的打包之前,需要对rtp.h264的一些基本概念有一个初步的了解,然后再使用rtp对h264的打包解包做解析 2.rtp认知 实时传送协议(Real-time ...

  4. android 根目录 文件 打包,Android image文件的打包和解包

    Android image文件的打包和解包 平台:msm8909+android5.1 用file *查看img文件的类型: 图1 Ramdisk.img和ramdisk-recovery.img为g ...

  5. [oeasy]python0019_ 打包和解包_struct_pack_unpack

    打包和解包 回忆上次内容 ASCII 由这样几类字符构成 英文大写字符 英文小写字符 数字 符号 电报时代对于英文.数字的编码 使用的是摩斯电码 这摩斯电码是3进制的编码方式 长短空 怎么演化成asc ...

  6. linux打包文件命令行,Linux 命令行 | 打包和解包命令

    .tar 解包:tar  xvf  FileName.tar 打包:tar  cvf  FileName.tar  fName  (单个文件打包) tar  cvf  FileName.tar   f ...

  7. Java 集合之自动打包和解包以及泛型

    自动打包与解包: 泛型: 上栗子: TestMap1.java: package com.zhj.www; import java.util.*;public class TestMap {publi ...

  8. pak文件的打包和解包

    pak格式的文件 一般游戏有资源 游戏素材会打包放进去 比如游戏语音 游戏多加点语音  多加一些贴图资源 外部文件实现的 素材--->pak文件--->用的时候从文件中取出来 文件的打包 ...

  9. linux下打包和解包、解压和压缩

    常用Linux 命令: 解压缩tar命令 .tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) 压 ...

最新文章

  1. 坑爹的Python陷阱(避坑指南)
  2. Single molecule real-time (SMRT) sequencing comes of age: applications and utilities for medical dia
  3. oracle安装出现getproces,oracle安装问题
  4. [css] 写一个动画,向上匀速移动100px,向下以1.5倍速度移动200px,一直反复循环
  5. python直方图教程_python如何画直方图
  6. logstash_output_mongodb插件用途及安装详解
  7. L1-023 输出GPLT (20 分) — 团体程序设计天梯赛
  8. 自考计算机软件基础真题,2019年4月自考计算机软件基础考试真题试卷
  9. 呼叫中心系统建设方案
  10. Java一般操作 对象序列化和反序列化
  11. Python—猫眼电影票房爬虫实战 轻松弄懂字体反爬!
  12. 计算机基础知识之工作总结,计算机教师工作总结(精选3篇)
  13. 速读原著-TCP/IP(子网寻址)
  14. ubuntu16.04安装Preempt RT实时内核
  15. 小程序picker用法
  16. 洛谷P5594-【XR-4】模拟赛(模拟)
  17. 台达PLC与单片机的通讯
  18. EtherCAT运动控制卡小线段前瞻的连续插补运动
  19. 太原网络营销师郭文军揭秘2016营销如何做?
  20. 鸿蒙(harmonyOS)应用开发-真机设备API版本查看

热门文章

  1. mysql中利用sql语句修改字段名称,字段长度等操作(亲测)
  2. MySQL导出数据遇到secure-file-priv问题的解决方法
  3. ELK实时日志分析平台环境部署--完整记录
  4. Vue的axios与ajax的区别:axios是对ajax的封装
  5. Mysql水平分表-merge
  6. matlab识别图像,基于MATLAB神经网络图像识别的高识别率代码
  7. wxpython动态实时绘图_wxPython: 简单的绘图例子
  8. 用qss 来控制qlabel显示字体的位置_Word表格总填不好,这些技巧轻松来拯救
  9. matlab绘制蜂窝,PPT技巧:如何快速设计蜂窝表达的图形设计?
  10. 慢查询工具percona安装