导读
一、数据类型的底层实现
1.1 列表:地址引用
浅拷贝,拷贝的是地址
散列表存放地址
如果是对元组进行添加的话,会开辟一段新的空间进行存储
深拷贝,将会重新开辟空间,相互独立
1.2 字典:稀疏数组
字典查找的速度非常快
底层原理
创建字典后,第一步,通过hash()计算键的散列值
第二步,根据计算的散列值确定其在散列表中的位置
(极个别会有冲突情况,但是内部都有相应的处理方法)
键值对的访问过程
第一步:计算要访问的键的散列值
第二步:根据计算的散列值,通过一定的规则,确定其在散列表中的位置
第三步:读取该位置上存储的值
理解:就是牺牲空间节省时间,
1.3 字符串:紧凑数组
通过紧凑数组,实现字符串的存储
因为字符串一般是一起访问得,地址紧凑在一起
1.4 类型是否可变
1.不可变类型:数字、字符串、元组
在生命周期中保持内容不变
换句话说,改变了就不是它自己了(id变了)
不可变对象的 += 操作实际上创建了一个新的对象
元组并不是总是不可变的
2.可变类型:列表、字典、集合
, 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.一个简单的装饰器
嵌套函数实现
语法糖
总结