封装与结构

基本概念

t1 = 1, 2
print(type(t1)) # 什么类型
t2 = (1, 2)
print(type(t2))

Python等式右侧出现逗号分隔的多值的时候,就会将这几个值封装到元组中。这种操作称为封装packing。

x, y = (1, 2)
print(x) # 1
print(y) # 2

Python中等式右侧是一个容器类型,左侧是逗号分隔的多个标识符,将右侧容器中数据的一个个和左侧标识符一一对应。这种操作称为解构unpacking。

从Python3开始,对解构做了很大的改进,现在用起来已经非常的方便快捷。

封装和解构是非常方便的提取数据的方法,在Python、JavaScript等语言中应用极广。

# 交换数据
x = 4 y = 5 t = x x = y y = t
# 封装和解构,交换
x = 10
y = 11
x, y = y, x

简单解构

# 左右个数相同
a,b = 1,2 a,b = (1,2) a,b = [1,2] a,b = [10,20] a,b = {10,20} # 非线性结构
a,b = {'a':10,'b':20} # 非线性结构也可以解构
[a,b] = (1,2) [a,b] = 10,20
(a,b) = {30,40}

那么,左右个数不一致可以吗?

a, b = (10, 20, 30)

剩余变量解构

在Python3.0中增加了剩余变量解构(rest)。

a, *rest, b = [1, 2, 3, 4, 5]
print(a, b)
print(type(rest), rest) # <class 'list'> [2, 3, 4]

标识符rest将尽可能收集剩余的数据组成一个列表。

a, *rest = [1, 2, 3, 4, 5]
print(a, rest) *rest, b = [1, 2, 3, 4, 5]
print(rest, b) *rest = [1, 2, 3, 4, 5]
print(rest) # 内容是什么?
a, *r1, *r2, b = [1, 2, 3, 4, 5] # ?
a, *_, b = [1, 2, 3, 4, 5]
print(_) # 在IPython中实验,_是最后一个输出值,这里将把它覆盖
_, *b, _ = [1, 2, 3]
print(_) # 第一个_是什么
print(b) # 是什么
print(_) # 第二个_是什么

_是合法的标识符,这里它没有什么可读性,它在这里的作用就是表示不关心这个变量的值,我不想要。

有人把它称作 丢弃(Throwaway)变量。

其它结构

x = [range(5)]
y = [*range(5)]
z = list(range(5))
print(x, y, z)

练习

  • 从nums = [1, (2, 3, 4), 5]中,提取其中4出来
if __name__ == '__main__':
_,[*_,a],_= [1, (2, 3, 4), 5]
print(a)
  • 从list(range(10))中,提取第二个、第四个、倒数第二个元素
if __name__ == '__main__':
_,a,_,b,*_,c,_=range(10)
print(a,b,c)

最新文章

  1. java中的23中设计模式(转)
  2. Spark机器学习读书笔记-CH04
  3. Bootflat – 基于 Bootstrap CSS 框架的扁平化界面
  4. Linux 下从头再走 GTK+-3.0 (二)
  5. yii 多模板
  6. 例子:使用C++中的this
  7. 设置Eclipse智能提示
  8. Android 4.4 上实现透明导航栏和状态栏 Translucent system bar
  9. web前端中实现多标签页切换的效果
  10. EF4.1: Add/Attach and Entity States(EF中的实体状态转换说明)
  11. [源代码] SailingEase .NET Resources Tool (.NET 多语言资源编辑器)
  12. BFS POJ2251 Dungeon Master
  13. ios、移动端 input type=date无法点击的问题解决方法
  14. [Swift]LeetCode273. 整数转换英文表示 | Integer to English Words
  15. socketServer并发处理socket
  16. 【Java集合系列六】LinkedHashMap解析
  17. 使用 Helm 包管理工具简化 Kubernetes 应用部署
  18. 图片自适应完美兼容IE8
  19. 从Java的角度修复CSRF漏洞
  20. linux bin &amp; sbin different

热门文章

  1. Shell脚本实现根据文件的修改时间来分类文件
  2. highchars操作集合
  3. 【C/C++】金币
  4. 1、Spring简介及IOC入门案例
  5. Java中Date类型与String 类型之间的互相转换
  6. vs2019+windows服务+nancy+打包
  7. Linux入侵 反弹shell
  8. Linux网络编程入门
  9. 异步FIFO总结+Verilog实现
  10. CF1428A Box is Pull 题解