深度之眼(十六)——Python:有益的探索

导读

在这里插入图片描述

一、数据类型的底层实现

1.1 列表:地址引用

浅拷贝,拷贝的是地址
散列表存放地址
在这里插入图片描述
如果是对元组进行添加的话,会开辟一段新的空间进行存储

在这里插入图片描述

深拷贝,将会重新开辟空间,相互独立

1.2 字典:稀疏数组

字典查找的速度非常快
底层原理
创建字典后,第一步,通过hash()计算键的散列值
第二步,根据计算的散列值确定其在散列表中的位置
(极个别会有冲突情况,但是内部都有相应的处理方法)

在这里插入图片描述

键值对的访问过程
第一步:计算要访问的键的散列值
第二步:根据计算的散列值,通过一定的规则,确定其在散列表中的位置
第三步:读取该位置上存储的值
在这里插入图片描述

理解:就是牺牲空间节省时间,

1.3 字符串:紧凑数组

通过紧凑数组,实现字符串的存储
因为字符串一般是一起访问得,地址紧凑在一起

在这里插入图片描述

1.4 类型是否可变

1.不可变类型:数字、字符串、元组
在生命周期中保持内容不变
换句话说,改变了就不是它自己了(id变了)
不可变对象的 += 操作实际上创建了一个新的对象

元组并不是总是不可变的

  1. 可变类型:列表、字典、集合
    , id保持不变,但是里面的内容可以变
    , 可变对象的+=操作实际在原对象的基础上就地修改

1.5 小例子

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、简洁的语法

2.1 解析语法

在这里插入图片描述
在这里插入图片描述

2.2 条件表达式

在这里插入图片描述

三、三大神器

3.1 生成器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2 迭代器

在这里插入图片描述
(1)列表、元组、字符串、字典.集合、文件
可以使用isinstance()判断-一个对象是否是[terable对象
在这里插入图片描述
(2)列表、 元组、字符串、字典、集合不是迭代器

for item in Iterable等价于:
先通过iter ()函数获取可迭代对象Iterable的迭代器
然后对获取到的迭代器不断调用next ()方法来获取下一个值并将其赋值给item
当遇到StopIteration的异常后循环结束
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.3 装饰器

1、需求的提出
(1)需要对已开发上线的程序添加某些功能
(2)不能对程序中函数的源代码进行修改
(3)不能改变程序中函数的调用方式

3、高阶函数
(1)接收函数作为参数
(2)或者返回-个函数
满足.上述条件之-的函数称之为高阶函数
在这里插入图片描述
4、嵌套函数
在函数内部定义一个函数
在这里插入图片描述
5.闭包
在这里插入图片描述
团包:延伸了作用域的函数
如果一个函数定义在另-个函数的作用域内,并且引用了外层函数的变量,则该函数称为闭包
闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)
在这里插入图片描述
6.一个简单的装饰器
嵌套函数实现

在这里插入图片描述
语法糖

在这里插入图片描述

总结

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_52592798/article/details/125988883