一、序列解包

  序列解包(或可迭代对象解包):解包就是从序列中取出其中的元素的过程,将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中。

  一般情况下要解包的序列包含的元素个数必须与你在等号左边列出的目标个数相同,否则Python将引发异常。但如果要解包序列元素个数与左边变量数不同的情况下,可使用星号运算符(*)来收集多余的值,这样无需确保值和变量的个数相同,还可将带星号的变量放在任何位置。赋值语句的右边可以是任何类型的序列,但带星号的变量最终包含的总是一个列表。在变量和值的个数相同时亦如此。这种解包方式也可用于函数参数列表中。

  举例:

  \>>>l,s,t,d=['a','bc','de'],'abcd',(1,2,3),{1:'a',2:'b'} #定义4个列表、字符串、元组和字典变量;

  \>>>l1,l2,l3=l #用l1、l2、l3解包列表,l1,l2,l3分别得到值'a', 'bc', 'de';

  \>>>s1,*s2,s3=s #用s1、s2、s3解包字符串,s1,s2,s3分别得到值'a', ['b', 'c'], 'd',注意星号的使用;

  \>>>t1,*t2=t #用t1、t2解包元组,t1,t2分别得到值1, [2, 3];

  \>>>d={i:chr(ord('a')+i) for i in range(5)} #d={0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e'}

  \>>>d1,*d2,d3=d #d1=0,d2=[1,2,3],d3=4,这个解包得到的是字典的键,不是字典项

  代码执行截屏如下:无锡看男科哪家好 http://www.03913881333.com/

  

  

  上面代码中,要得到字典的键和值,可以使用:k,v=d.popitem() #k=4, v='e'。

  二、复杂序列解包

  上面介绍的序列解包所举例子是一种比较简单的情况,即序列中的元素类型不是容器类型,但如果出现序列中的元素也是序列,此时需要使用复杂序列解包。

  复杂序列解包是在序列中内嵌序列的情况下,解包语句的左边也可以包含对应序列,从而对序列中的序列进行解包。看下面的例子:

  \>>>a,[b,c],*d=(1,(2,3),4,5)

  \>>>a,(b,c),*d=(1,[2,3],4,5)

  以上两个语句执行后,a,b,c,d对应的值都是对应为:1, 2, 3, [4, 5]

  \>>>a,(b,*c),*d=(1,[2,3,10],4,5)

  解包后,a,b,c,d对应的值分别为:1, 2, [3, 10], [4, 5]

  \>>>a,(b,c,e),*d=(1,[2,3,{10,11}],4,5)

  解包后,a,b,c,d,e对应的值分别为:1, 2, 3, [4, 5], {10, 11}

  三、链式赋值

  链式赋值是用一行语句将多个变量赋值为同一个值,语法如下:

  变量1=变量2=变量n=赋值表达式

  该语法实际执行效果类似于:

  变量n=赋值表达式

  变量2=变量n

  变量1=变量2

  这种执行效果表示所有变量都指向同一个对象。

  注意:上面部分关于赋值顺序的描述错误,感谢博友Johnny592的提醒,为了让看到本文的人加深印象,老猿没有直接修改这部分内容,而是在此说明,并另外在博文《关于链式赋值的赋值顺序问题》中进行了详细说明。

  四、链式比较

  链式比较就是在一个比较语句中部使用逻辑运算符直接判断某个数据是否在某区间,如:if 0=

  本节介绍了序列解包、链式赋值和链式比较,序列解包稍微复杂一点,链式赋值和链式比较非常简单,就没有展开细说。

Python特色的序列解包、链式赋值、链式比较的更多相关文章

  1. 第4.7节 Python特色的序列解包、链式赋值、链式比较

    一.序列解包 序列解包(或可迭代对象解包):解包就是从序列中取出其中的元素的过程,将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中. 一般情况下要解包的序列包含的元素个数必须与你在等 ...

  2. Python中序列解包与函数的参数收集之间的关系

    在<第4.7节 Python特色的序列解包.链式赋值.链式比较>中老猿介绍了序列解包,<第5.2节 Python中带星号的函数参数实现参数收集>介绍了函数的参数收集,实际上函数 ...

  3. Python3 序列解包

    转载自:https://blog.csdn.net/yilovexing/article/details/80576788 序列解包是 Python 3.0 之后才有的语法 什么是序列解包呢?先看一个 ...

  4. python 零散记录(五) import的几种方式 序列解包 条件和循环 强调getattr内建函数

    用import关键字导入模块的几种方式: #python是自解释的,不必多说,代码本身就是人可读的 import xxx from xxx import xxx from xxx import xx1 ...

  5. Python中的可变、不可变对象和赋值技巧序列解包

    可变对象和不可变对象 在python中一切皆对象.在Python中不存在所谓的值传递调用,一切传递都是对象的引用,也可认为是传址. python中,对象分为可变(mutable)和不可变(immuta ...

  6. Python——序列封包与序列解包

    一.序列封包与序列解包 把多个值赋给一个变量时,Python会自动的把多个值封装成元组,称为序列封包. 把一个序列(列表.元组.字符串等)直接赋给多个变量,此时会把序列中的各个元素依次赋值给每个变量, ...

  7. python 序列解包(解压缩)

    序列解包(解压缩) 所学的解压缩 如果我们给出一个列表,我们需要一次性取出多个值,我们是不是可以用下面的方式实现呢? name_list = ['nick', 'egon', 'jason'] x = ...

  8. 在python中元组与列表的区别及序列解包

    一. 元组与列表的区别 元组中的数据一旦定义就不允许更改. 元组没有append().extend()和insert()等方法,无法向元组中添加元素. 元组没有remove()或pop()方法,也无法 ...

  9. Python序列解包

    元组的序列解包range对象的序列解包迭代对象的序列解包列表的序列解包字典的序列解包序列解包与遍历序列解包的其它用法 元组的序列解包 x,y,z = (1,2,3) print(x,y,z) 1 2 ...

随机推荐

  1. Python开源项目Top30

    原文地址:https://www.cnblogs.com/stoker/p/9101825.html No 1:Home-assistant (v0.6+) 基于Python 3的开源家庭自动化平台[ ...

  2. str.replace替换变量名的字符串

    网易云课堂该课程链接地址 https://study.163.com/course/courseMain.htm?share=2&shareId=400000000398149&cou ...

  3. Python3基础 print %xX 十六进制大小写

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...

  4. 使用swig在python中调用C++

    1.安装swig 下载链接: http://www.swig.org/survey.html tar -xvf swig-.tar.gz ./configure --prefix=/usr/local ...

  5. Angular2 输入完成后触发函数

    (blur)="keySearch($event)" ,鼠标点击其他地方触发 keySearch(e): void { var dom = $(e.target); var key ...

  6. cordova调用第三方应用

    cordova 帮助webapp 达到调用原生系统的功能 项目需求:在项目中调用系统中含有的第三方地图应用 需求其实分为两步: 1. 查找本地地图应用 2.成功调起本地应用 首先需要安装两个插件,安装 ...

  7. 【ARM-Linux开发】OpenACC并行编程实战笔记

    今年运气比较好,学了cuda之后,了解到了gpu的另两种使用语言opencl和openacc,  opencl(Open Computing Language ,开放计算语言)是面向异构系统的并行编程 ...

  8. spket插件安装并设置JQuery自动提示

    下载地址: com.spket.ui_1.6.23jar包license替换破解.zip: https://pan.baidu.com/s/1JooqlkhHczPT0V34-Qm0oA 提取码: s ...

  9. MAC——Homebrew介绍和使用

    一.Homebrew是什么 Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装.卸载.更新.查看.搜索等很多实用的功能.简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径 ...

  10. centos7查看防火墙状态、关闭防火墙

    查看防火墙状态: firewall-cmd --state 关闭防火墙: systemctl stop firewalld.service 禁止firewall开机启动: systemctl disa ...