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

解构是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. .net Timer定时执行

    System.Timers.Timer可以实现数据库定时更新的功能 Global.asax void Application_Start(object sender, EventArgs e) { / ...

  2. 【CF453D】 Little Pony and Elements of Harmony(FWT)

    题面 传送门 设\(a\)的递推公式为 \[a_i=\sum_ja_jb[count(i\oplus j)]\] 其中\(\oplus\)为异或,\(count(i)\)表示\(i\)的二进制中\(1 ...

  3. chrome cpu占用100%

    参考原文地址:https://stackoverflow.com/questions/20276097/chrome-devtools-100-cpu 问题描述,chrome打开devtools开发者 ...

  4. POJ1475 Pushing Boxes(双搜索)

    POJ1475 Pushing Boxes  推箱子,#表示墙,B表示箱子的起点,T表示箱子的目标位置,S表示人的起点 本题没有 Special Judge,多解时,先最小化箱子被推动的次数,再最小化 ...

  5. js 平均分割

    let alllist=res.data; var result = []; for (var i = 0; i < alllist.length; i += 3) { result.push( ...

  6. 使用私有git仓库备份服务器脚本和配置文件

    1. 创建私有git仓库 服务器端配置: # 安装 git yum -y install git # 创建 git 用户 useradd git # 创建私有仓库数据存储目录 mkdir /git_b ...

  7. 2016级算法第一次练习赛-D.AlvinZH的儿时回忆——跳房子

    864 AlvinZH的儿时回忆----跳房子 题目链接:https://buaacoding.cn/problem/864/index 思路 这是一道简单题,但是同样有人想复杂了,DP?大模拟?. ...

  8. 大数据平台-修改主机名及ssh免密码登录

    一.查看服务器初始配置: 1.总核数 = 物理CPU个数 X 每颗物理CPU的核数 2.总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数cat /pr ...

  9. Vue 1-- ES6 快速入门、vue的基本语法、vue应用示例,vue基础语法

    一.ES6快速入门 let和const let ES6新增了let命令,用于声明变量.其用法类似var,但是声明的变量只在let命令所在的代码块内有效. { let x = 10; var y = 2 ...

  10. CentOS&.NET Core初试-4-安装守护服务(Supervisor)

    系列目录 CentOS的安装和网卡的配置 安装.NET Core SDK和发布网站 Nginx的安装和配置 安装守护服务(Supervisor) Supervisor是什么? Supervisor 是 ...