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

解构是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. 利用Trace.WriteLine定位难以重现的问题

    最近的一个项目中,在客户测试环境(UAT)发现了一个bug,却反复尝试都无法在开发环境和QA环境来重现.界面上也没有出现任何异常和错误,只是某个数据的显示错误,其他数据都正常.仔细分析和调试了出错位置 ...

  2. T-SQL逻辑查询

    理解T-SQL的逻辑查询顺序是学习SQL Server的基础. T-SQL逻辑执行顺序 (8)    SELECT (9) DISTINCT (11) <TOP_specification> ...

  3. 【转】基于Redis实现延时队列服务

    背景 在业务发展过程中,会出现一些需要延时处理的场景,比如: a.订单下单之后超过30分钟用户未支付,需要取消订单b.订单一些评论,如果48h用户未对商家评论,系统会自动产生一条默认评论c.点我达订单 ...

  4. NOIP前刷题记录

    因为本蒻实在太蒻了...对于即将到来的NOIP2018ssfd,所以下决心要把自己近期做过的题目(衡量标准为洛谷蓝题难度或以上)整理一下,归归类,简单地写一下思路,就当作自己复习了吧qwq 本随笔持续 ...

  5. Python处理json数据--世界国家维度数据

    1.准备国家的json数据 将准备好的json数据放在指定的目录下,此处可以重这里下载 2.测试编写python脚本处理json提取字段值 #coding:utf8 import time, re, ...

  6. miniui中表单验证规则总结

    页面链接: http://www.miniui.com/demo/#src=form/rules.html 页面效果图: 页面代码: <!DOCTYPE html PUBLIC "-/ ...

  7. vue-cli起的webpack项目 用localhost可以访问,但是切换到ip就不可以访问

    我用的是vux起的一个项目(移动端,基于vue的),因为是移动端的,需要在手机上测试,发现用http://localhost:8081/访问的挺好的,但是换到ip就访问不了,期初我以为是代理的原因,将 ...

  8. 1.ajax简单实现异步交互

    效果:点击获取信息 testAjax.jsp: <%@ page language="java" contentType="text/html; charset=U ...

  9. JavaScript实现自定义alert弹框

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAh0AAAFkCAYAAACEpYlzAAAfj0lEQVR4nO3dC5BddZ0n8F93pxOQCO

  10. logback 发送邮件的类.

    类名 : SMTPAppenderBase方法名: sendBuffer