[PY3]——内置数据结构(8)——解构与封装
### 解构的理解与用法 ###
解构是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)——解构与封装的更多相关文章
- [PY3]——内置数据结构(7)——字典及其常用操作
字典及其常用操作Xmind图 关于字典 字典是一种key-value结构 字典是无序的 字典的定义 # {}大括号可以直接定义一个空字典 In [1]: d={};type(d) Out[1]: di ...
- [PY3]——内置数据结构(6)——集合及其常用操作
集合及其常用操作Xmind图 集合的定义 # set( ) # {0,1,2} //注意不能用空的大括号来定义集合 # set(可迭代对象) In [1]: s=set();type ...
- [PY3]——内置数据结构(5)——字符串编码
py2和py3中关于字符串的最大区别? python2中只有 unicode类型 而python3中有 string bytes两种类型 关于string和bytes的区分? 1.str是文本序列.b ...
- [PY3]——内置数据结构(9)——线性结构与切片/命名切片slice()
线性结构的总结 列表list 元组tuple 字符串str bytes bytearray的共同点: 都是顺序存储.顺序访问的: 都是可迭代对象: 都可以通过索引访问 线性结构的特征: 可迭代 ...
- [PY3]——内置数据结构(1)——列表及其常用操作
列表及其常用操作_xmind图 about列表 列表是一个序列,用于顺序存储数据 列表分为两种:ArrayList(用数组实现).LinkedList(用链表实现) 定义与初始化 #l ...
- [PY3]——内置数据结构(2)——元组及其常用操作
定义和初始化 #tuple() 使用工厂函数tuple定义一个空元组 #() 使用圆括号定义一个空元组 #(1,2,3) 使用圆括号定义有初始值的元组 #tuple(可迭代对象) 把可迭代对象转换为一 ...
- [PY3]——内置数据结构(3)——字符串及其常用操作
字符串及其常用操作xmind图 字符串的定义 1. 单引号/双引号 In [1]: s1='hello world' In [2]: s1="hello world" 2. 三对单 ...
- [PY3]——内置数据结构(4)——字符串格式化(format)
字符串格式化是拼接字符串的一种手段 join和+拼接字符串的方法,难以控制格式 printf style 字符串格式化 这种方法是从c语言继承过来的 # 待格式化的字符串:一个字符串存在占位符 In ...
- 【Redis源代码剖析】 - Redis内置数据结构之压缩字典zipmap
原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/51111230 今天为大家带来Redis中zipmap数据结构的分析,该结构定义在 ...
随机推荐
- C#中IO操作
using sysytem.Io; File.Exists() 检查文件是否存在, Directory.Exists() 检查文件夹是否存在 FileInfo DirectoryInfo 可实例化 对 ...
- 在.net Core中使用StackExchange.Redis 2.0
StackExchange.Redis 2.0做了大量的改进包括使用了高性能的IO库System.IO.Pipelines来提升性能以及解决Timeouts问题, 但是在.net Core2.2之前为 ...
- Spring Boot - 依赖注入
@Autowired 查找被注解的变量类型,找到所有此类型的构建或此类型子类的构建 如果一个也没有找到,看required参数,false则用null,true则失败(默认,即spring会启动失败) ...
- leetcode 23. 合并K个排序链表 JAVA
题目: 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: ...
- 在线绘图网站 UML、思维导图、 流程图、 用例图等等
https://www.processon.com/ 用我的微信登录即可 帐号是 QQ邮箱
- iOS学习笔记(1)--认识Xcode6.1的Interface Builder和常用快捷键
Interface Builder基本界面 红色区域为工具栏(Tool Bar) 蓝色区域为导航区(Navigator Area) 绿色区域为编辑区(Editor Area) 黑色区域是调试区(Deb ...
- iOS 循环轮播框架思路
使用3个imageview实现无线轮播的大致原理 将3个imageview添加到scrollview上面,scrollview的contensize是3个imageview的宽度,设置scrollvi ...
- ListView-电影列表
import React, { Component } from 'react';import { Platform, StyleSheet, Text, View, ListView } from ...
- JDBC概念和使用
JDBC学习: JAVA的数据获取方式: 1 直接声明变量并赋值. 2 Scanner类控制台输入 3 IO流(将硬盘存储中的数据读取 ...
- 「框架」菜鸟简单模仿一下spring的ioc和aop思想,欢迎大家进来阅读指教
*博客搬家:初版发布于 2015/12/04 16:41 原博客地址:https://my.oschina.net/sunqinwen/blog/539397 spring最核心的部分莫过于io ...