封装与结构

基本概念

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)

03.python封装与解构的更多相关文章

  1. Python入门篇-封装与解构和高级数据类型集合(set)和字典(dict)

    Python入门篇-封装与解构和高级数据类型集合(set)和字典(dict) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.封装和结构 #!/usr/bin/env pytho ...

  2. python之数据解构和算法进阶

    1.解压赋值多个变量 采用解构的方法.可迭代对象才可以,变量数量与元素个数要一一对应,或者采用*万能接收. 2.解压可迭代对象赋值多个变量 如果一个可迭代对象的元素个数超过变量个数时,会抛出一个 Va ...

  3. [PY3]——内置数据结构(8)——解构与封装

    ### 解构的理解与用法 ### 解构是python很有特色的一个功能,被很多语言借鉴(例如ES6) # 元素按照顺序赋值给变量 In [31]: lst=list(range(5)) In [32] ...

  4. 素数、杨辉三角、封装结构和集合操作(15)——IPython使用和封装解构

    IPython使用 帮助 ? ##Ipython的概述和简介 help(name) ##查询指定名称和帮助 obj? ##列出obj对象的详细信息 obj?? ##列出更详细的信息 特殊变量 _表示前 ...

  5. Python入门篇-函数、参数及参数解构

    Python入门篇-函数.参数及参数解构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.函数概述 1>.函数的作用即分类 函数 数学定义:y=f(x) ,y是x的函数,x ...

  6. python 函数、参数及参数解构

    函数 数学定义 y=f(x), y是x函数,x是自变量.y=f(x0,x1...xn) Python函数 由若干语句组成的语句块,函数名称,参数列表构成,它是组织代码的最小单位 完成一定的功能 函数作 ...

  7. python封装和解构

    封装 将多个值使用逗号分割,组合在一起 本质上,返回一个元组,只是省略了小括号 python的特有的语法,被很多语言学习借鉴 t1 = (1,2) #定义元组 t2 = 1,2 #将1和2封装成元组 ...

  8. Python基础知识3-函数、参数及参数解构

    函数 函数定义.调用 函数参数 函数参数默认参数 函数参数默认值 可变参数 keyword-only参数 可变参数和参数默认值 函数参数 参数解构 练习: #编写一个函数,能够接受至少2个参数 def ...

  9. Python之函数&参数&参数解构

    1.1函数定义 def 函数名(参数列表): 函数体(代码块) [return 返回值] p 函数名就是标识符,命名要求一样 语句块必须缩进,约定4个空格 Python的函数没有return语句,隐式 ...

随机推荐

  1. 命令行方式运行hadoop程序

    1,写一个java代码.*.java.(这里从example 拷贝一个过来作为测试) cp src/examples/org/apache/hadoop/examples/WordCount.java ...

  2. AOP切入点的配置

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  3. 00 - Vue3 UI Framework - 阅读辅助列表

    阅读列表 01 - Vue3 UI Framework - 开始 02 - Vue3 UI Framework - 顶部边栏 03 - Vue3 UI Framework - 首页 04 - Vue3 ...

  4. IT过来人的10点经验谈

    1 入行要趁早,正常是22岁本科或25岁硕士毕业入行.如果是零基础经培训班加持的,尽量在28岁前入行,30岁以后再想要入行IT的,千万慎重. 2 IT行业确实能挣大钱,而且能为学历一般学校一般家庭背景 ...

  5. for循环中的变量泄漏

    经典的案例 let arr = [] for(var i =0;i<=5;i++){ arr[i]= function fn(){ console.log(i) } } arr[0]() //6 ...

  6. logcplus(2)

    (一)log4cplus是C++编写的开源的日志系统,功能非常全面,用到自己开发的工程中会比较专业的,:),本文介绍了log4cplus基本概念,以及如何安装,配置.  ### 简介 ### log4 ...

  7. python之异步编程

    一.异步编程概述 异步编程是一种并发编程的模式,其关注点是通过调度不同任务之间的执行和等待时间,通过减少处理器的闲置时间来达到减少整个程序的执行时间:异步编程跟同步编程模型最大的不同就是其任务的切换, ...

  8. CF792A New Bus Route 题解

    Content 给定一个长度为 \(n\) 的数列 \(a_1,a_2,a_3,...,a_n\),求这个序列当中差的绝对值最小的数对并求出这样的数对的个数. 数据范围:\(2\leqslant n\ ...

  9. vscode配置指南,美化技巧

    vscode配置指南,美化技巧 vscode****选中部分高亮 "workbench.colorCustomizations": { "editor.selection ...

  10. lvm 扩容

    总体思路: 逻辑卷要扩容,先扩容对应卷组, 扩容卷组的方式: 添加新的物理卷(磁盘已有分区,扩容后新建分区:或者新加了一块硬盘创建了新的物理卷),vgextend myvg /dev/vdb 扩容,/ ...