### 解构的理解与用法 ###

解构是python很有特色的一个功能,被很多语言借鉴(例如ES6)

# 元素按照顺序赋值给变量
In [31]: lst=list(range(5))
In [32]: head,*mid,tail=lst
In [33]: print(head,tail)
0 4
In [34]: print(mid)
[1, 2, 3] # 变量和元素个数必须匹配
In [36]: v1,v2,v3,v4,v5,v6=lst
ValueError: not enough values to unpack (expected 6, got 5) # *表示可以接受任意个数的元素
# 但*变量不能单独出现
In [35]: *v=lst
SyntaxError: starred assignment target must be in a list or tuple
# 也不能重复出现
In [40]: head,*m1,*m2,tail=list(range(5)) ^
SyntaxError: two starred expressions in assignment
# 带*的这个变量的输出是一个列表
In [37]: head,*mid,tail=1,2
In [38]: print(head,tail)
1 2
In [39]: print(mid)
[] # 解构是支持多层次的
In [14]: lst=[1,(2,3),5]
In [15]: _,(_,val),*_=lst
In [16]: print(val)
3
In [17]: _,[*_,val],*_=lst
In [18]: print(val)
3

### 一个惯例,下划线‘_’ ###

# python有一个惯例,是使用单个下划线“_”来表示丢弃该变量

In [42]: head,*_,tail=lst
In [7]: v1,_,v3,*_,vd,_=lst

### 解构的使用场景 ###

1. 解析配置文件

In [20]: key,_,value='env=PATH=/usr/bin:$PATH'.partition('=')

In [21]: print(key);print(value)
env
PATH=/usr/bin:$PATH

2. 非常复杂的数据结构,多层嵌套的线性结构的时候,可以用解构快速提取其中的值

3. 函数返回值

### 封装 ###
封装:相当于定义一个元组时省略小括号

In [18]: t1=1,2;t2=(1,2)

In [20]: type(t1)
Out[20]: tuple In [21]: type(t2)
Out[21]: tuple //t1和t2等效
# 可用于快速交换两个变量的值
In [1]: x=1;y=2 In [3]: x,y=y,x //左边解构,右边封装 In [4]: print(x,y)
2 1

[PY3]——内置数据结构(8)——解构与封装的更多相关文章

  1. [PY3]——内置数据结构(7)——字典及其常用操作

    字典及其常用操作Xmind图 关于字典 字典是一种key-value结构 字典是无序的 字典的定义 # {}大括号可以直接定义一个空字典 In [1]: d={};type(d) Out[1]: di ...

  2. [PY3]——内置数据结构(6)——集合及其常用操作

    集合及其常用操作Xmind图          集合的定义 # set( ) # {0,1,2} //注意不能用空的大括号来定义集合 # set(可迭代对象) In [1]: s=set();type ...

  3. [PY3]——内置数据结构(5)——字符串编码

    py2和py3中关于字符串的最大区别? python2中只有 unicode类型 而python3中有 string bytes两种类型 关于string和bytes的区分? 1.str是文本序列.b ...

  4. [PY3]——内置数据结构(9)——线性结构与切片/命名切片slice()

    线性结构的总结 列表list  元组tuple  字符串str  bytes  bytearray的共同点: 都是顺序存储.顺序访问的: 都是可迭代对象: 都可以通过索引访问 线性结构的特征: 可迭代 ...

  5. [PY3]——内置数据结构(1)——列表及其常用操作

    列表及其常用操作_xmind图         about列表 列表是一个序列,用于顺序存储数据 列表分为两种:ArrayList(用数组实现).LinkedList(用链表实现) 定义与初始化 #l ...

  6. [PY3]——内置数据结构(2)——元组及其常用操作

    定义和初始化 #tuple() 使用工厂函数tuple定义一个空元组 #() 使用圆括号定义一个空元组 #(1,2,3) 使用圆括号定义有初始值的元组 #tuple(可迭代对象) 把可迭代对象转换为一 ...

  7. [PY3]——内置数据结构(3)——字符串及其常用操作

    字符串及其常用操作xmind图 字符串的定义 1. 单引号/双引号 In [1]: s1='hello world' In [2]: s1="hello world" 2. 三对单 ...

  8. [PY3]——内置数据结构(4)——字符串格式化(format)

    字符串格式化是拼接字符串的一种手段 join和+拼接字符串的方法,难以控制格式 printf style 字符串格式化 这种方法是从c语言继承过来的 # 待格式化的字符串:一个字符串存在占位符 In ...

  9. 【Redis源代码剖析】 - Redis内置数据结构之压缩字典zipmap

    原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/51111230 今天为大家带来Redis中zipmap数据结构的分析,该结构定义在 ...

随机推荐

  1. 创建oracle数据库时,出现ORA-00922: 选项缺失或无效

    sdd53HOME 新建oracle数据库时遇到ORA-00922: 选项缺失或无效的问题,如图: 原因:一般是语句的语法有问题.比如命名不对,关键字写错等等.对于非标准的命名,一般采用双引号来创建. ...

  2. 串口实现FIFO接受数据(V2)

    在上一次的基础上添加了不同需求缓冲区大小可变的更改. /* * 串口的FIFO简单读取实现 * 功能,实现串口的FIFO实现 * 使用方法: * 更新时间:2017.9.26 * 版本:v2.0.0 ...

  3. 二十一、Node.js-EJS 模块引擎

    初识 EJS 模块引擎 我们学的 EJS 是后台模板,可以把我们数据库和文件读取的数据显示到 Html 页面上面.它是一个第三方模块,需要通过 npm 安装https://www.npmjs.com/ ...

  4. Centos6.9下PXE安装centos 7

    一.简介 这篇文章是无kickstart下安装centos7的,本篇大部分内容同我另外一篇文章相似,只是Centos7 中的isolinux.cfg有一些不太一样需要说明一下. https://www ...

  5. leetcode 213. 打家劫舍 II JAVA

    题目: 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金.这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的.同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻 ...

  6. mysqli扩展库应用---批量执行sql语句

    1, mysqli批量执行sql语句.基本语法: $sqls=”sql1;sql2;………” mysqli::multi_query($sqls); 同一个$sqls要么是增删改语句集合,要么是查询语 ...

  7. python 简单爬虫(beatifulsoup)

    ---恢复内容开始--- python爬虫学习从0开始 第一次学习了python语法,迫不及待的来开始python的项目.首先接触了爬虫,是一个简单爬虫.个人感觉python非常简洁,相比起java或 ...

  8. iOS开发中UILocalNotification本地通知实现简单的提醒功能

    这段时间项目要求做一个类似的闹钟提醒功能,对通知不太熟悉的我,决定先用到xcode自带的本地通知试试,最终成功的实现了功能,特整理分享下. 它的表现特点: app关闭的时候也能接收和显示通知. app ...

  9. 如何分析python的性能(linux)

    一.多进程: 查看程序所有进程与线程 如果python程序启动后形成多个进程如何判断其关系 显示进程的树状结构.-cp 表示树展开,且显示进程号码 $pstree -cp 显示结果 │ │ │ ├─p ...

  10. JS 与 OC 交互

    WebView与JS的几种交互 IOS中 使用JavaScriptCore 实现OC与JS的交互 JavaScriptCore 使用