1. 序列分解为单独的变量
    1.1 将一个包含N个元素的元组或者序列分解成为N个单独的变量。
    在python中任何序列或者元素都可以通过一个简单的赋值来分解为单独的变量,唯一的要求是变量的总数和结构要与序列相吻合
p = (4,6,8)
x,y,z = p
print('x is',x)
print('y is',y)
print('z is',z)

屏幕输出的结果是:

x is 4
y is 6
z is 8

需要注意的是,如果元素的数量不匹配,将得到一个错误的提示:

p = (4,6,8)
y,z = p
print('y is',y)
print('z is',z)

错误提示:

Traceback (most recent call last):File "D:/home/temp/temp1.py", line 2, in <module>y,z = p
ValueError: too many values to unpack (expected 2)

1.2 分解操作丢弃特定的元素值
实际上不仅仅是元组或者列表,只要对向恰好是可迭代的,那么久可以执行分解操作,包括字符串,文件、迭代器和生成器。

p = 'nihao'
y,z,_,_,_, = p
print('y is',y)
print('z is',z)

屏幕输出:

y is n
z is i

事实上,从这个例子中我们也可以看出,如果是想丢弃某一些值,留下我们需要的特定值,我们可以才用一些用不到的变量名,例如_ 。(这不是最好的办法,下面会介绍一种更好的办法)

  1. 从任意长度的可迭代对象中分解元素
    2.1 在1中我们发现了从对象中分解出N个元素,如果对象中元素数量大于N,则会抛出‘分解值过多(too many values to unpack)’的异常,python中,我们可以用‘*表达式’来解决这个问题。
    *这个标号在python中表示不确定个数,例如在函数的参数不确定的时候用*args来代替(http://blog.csdn.net/jinxiaonian11/article/details/53501305),在元素分解的时候也可以用。
p = 'nihao'
y,*q,z = p
print('y is',y)
print('q is',q)
print('z is',z)

屏幕输出:

y is n
q is ['i', 'h', 'a']
z is o

从例子可以看出,*修饰表达式的时候python处理的办法是将不确定个数的部分用一个列表来表示。很显然需要注意的问题是,这种方法不能再两端都用这种方法:

p = 'nihao'
*y,q,*z = p
print('y is',y)
print('q is',q)
print('z is',z)

屏幕输出:

  File "D:/home/temp/temp1.py", line 2*y,q,*z = p^
SyntaxError: two starred expressions in assignment

其实很好理解,python不知道那一部分是确定的,所以无法处理。
2.2 多个‘*表达式’连用
有时候需要将多个‘*表达式’连用,以达到更加好的效果。

p = [20,88,'nihao',[7,8,2012]]
*y,(*_,z) = p
print('y is',y)
print('z is',z)

屏幕输出:

y is [20, 88, 'nihao']
z is 2012

这样就能精确的得到我们想要的元素。从中我们可以发现,一般这样用的场合是需要分解得到的元组在对象的一个还可以在分的对象中(子对象)。

元素分解是在编程中经常遇到的问题,采用这些方法可以是我们的代码精简,可阅读性强。

python学习笔记4.3-python高级之元素的分解相关推荐

  1. Python学习笔记:使用Python操作数据库

    Python学习笔记:使用Python操作数据库 一.数据库编程接口 为了对数据库进行统一的操作,大多数语言都提供了简单的.标准化的数据库接口(API).在Python Database API 2. ...

  2. Python学习笔记:用Python获取数据(本地数据与网络数据)

    Python学习笔记:用Python获取数据(本地数据与网络数据) 一.用Python获取本地数据 读写文件(三种基本模式:r, w, a) 1.写文件 2.读文件

  3. python学习笔记26(python中__name__的使用)

    python学习笔记26(python中__name__的使用) 在python中,每个py文件都是一个模块,也都是一个可执行文件,即包含main方法.因此,对每个py文件,可以单独运行,也可以imp ...

  4. python学习笔记1之-python简介及其环境安装

    python学习笔记之-python简介及其环境安装 最近几年python之火不用多说,最近开始利用时间自学python,在学习的过程中,按照自己的思路和理解记录下学习的过程,并分享出来,如果正好你也 ...

  5. Python学习笔记(十)—— 高级特性

    一.切片 1.定义: 经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符. 2.语法: A[1:3] 取出1到3,都是正数的情况下,缺填的为0(第一个),end ...

  6. Python学习笔记2-搭建Python开发环境

    1  Python开发环境概述 所谓"工欲善其事,必先利其器".在正式学习Python开发前,需要先搭建Python开发环境.Python是跨平台的开发工具,可以在多个操作系统上进 ...

  7. 【Python学习笔记】1.Python简介

    本系列为自己学习Python的笔记,如有误,欢迎大家指正. Python介绍 简介 Python是一种解释型.面向对象的语言.由吉多-范罗苏姆(Guido van Rossum)于1989年发明,19 ...

  8. Python学习笔记(二)——高级特性

    知识点 切片 切片 取一个list或tuple的部分元素. 原理:调用__getitem__,__setitem__,__delitem__和slice函数. 根据官方的帮助文档(https://do ...

  9. Python学习笔记:开始Python编程

    随着人工智能以及大数据的火热,Python这门语言也被推上了前台,越来越受大家的青睐.受不住诱惑,我也开始努力学习这门语言.边学习,边整理自学笔记,与大家分享,也接受大家的监督,让自已能够坚持下去,熟 ...

  10. Python学习笔记1-初识Python及Python环境搭建

    Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k.相对于 Python 的早期版本,这是一个较大的升级.为了不带入过多的累赘,Python 3.0 在设计的时候没有考 ...

最新文章

  1. 2020滑铁卢大学计算机科学学费,加拿大大学国际生学费上涨 滑铁卢大学学费上涨62%...
  2. 基本电路元件和特性(2)电容器和电容vs.电感器和电感
  3. luoguP4503 [CTSC2014]企鹅QQ hash
  4. 在阿里写了8年代码后,我才明白这些道理
  5. python矩阵的平方_NumPy之计算两个矩阵的成对平方欧氏距离
  6. Java加密与解密的艺术~SM4实现
  7. 世界最前沿黑科技实验室 MIT Media Lab 教授 Cynthia: 让社交机器人陪伴千万家庭成为现实...
  8. oracle登录页面错误,php和oracle的页面登录问题
  9. Git教程——如何创建一个版本库(Repository)
  10. SpringBoot结合Druid配置JNDI多数据源
  11. MyEclipse 10破解教程
  12. Alex Smith: An NFL quarterback on overcoming setbacks and self-doubt
  13. python turtle 乌龟赛跑_海龟快跑,turtle碰撞检测小游戏
  14. 2022年最新餐饮外卖行业市场研报合集(共45份)
  15. VS2008鼠标右键不灵敏,TFS的Local Path无法打开对应文件夹
  16. ubuntu 从刷机到yolov5环境搭建训练记录
  17. 2021汽车行业内容营销白皮书
  18. html实现好看的照片墙
  19. 文件上传upload-labs第四关
  20. 十个好用的iOS开发辅助工具与资源

热门文章

  1. 计算机专业大一有必要买电脑吗,大一有必要买电脑吗 适合女生用的笔记本电脑...
  2. 【C语言】数据类型(基本类型、构造类型、类型转换)
  3. 做程序员的前途怎么样?就业前景好吗?
  4. IT人的日韩俄语歌单:已然被二次元的“恋爱循环”洗脑
  5. 串联谐振试验装置升压达不到目标电压的原因是什么?
  6. pygame飞机大战用精灵组(sprite)的层(layer)编写(二)BOSS登场了
  7. 简单工厂模式实现-电视机工厂案例
  8. Python小游戏——孔明棋
  9. 重生之我是赏金猎人-SRC漏洞挖掘(二)-逆向app破解数据包sign值实现任意数据重放添加
  10. dynamic-datasource-spring-boot-starter源码分析