知识点汇总
##1、Python栈区内存和堆区内存
内存中的堆栈和数据结构堆栈不是一个概念,可以说内存中的堆栈是真实存在的物理区,数据结构中的堆栈是抽象的数据存储结构。
内存空间在逻辑上分为三部分:代码区、静态数据区和动态数据区,动态数据区又分为栈区和堆区。
代码区:存储方法体的二进制代码。高级调度(作业调度)、中级调度(内存调度)、低级调度(进程调度)控制代码区执行代码的切换。
静态数据区:存储全局变量、静态变量、常量,常量包括final修饰的常量和String常量。系统自动分配和回收。
栈区:存储运行方法的形参、局部变量、返回值。由系统自动分配和回收。
堆区:new一个对象的引用或地址存储在栈区,指向该对象存储在堆区中的真实数据。
简而言之一句话:栈放变量,堆放对象(真实数据)
Python变量与基本数据类型
##2、八大数据类型及其使用方法
基本数据类型与操作方法
##3、python垃圾回收
1 引用计数
2 标记-清除机制
3 分代技术
详解Python垃圾回收机制
##4、赋值、深拷贝与浅拷贝
赋值:栈区内存的变量指向堆区内存的对象
浅拷贝:list自带的方法: l2 = l1.copy(), 拷贝静态对象和动态对象的地址。
深拷贝:需要导入copy库,静态对象和动态对象都新建一份(不管几层)。
底层剖析Python深浅拷贝
##5、文件操作与with上下文管理器
ContextManager 上下文管理器中有 __enter__ 和 __exit__ 两个方法,
以with为例子,__enter__ 方法会在执行 with 后面的语句时执行,一般用来处理操作前的内容。比如一些创建对象,初始化等;
__exit__ 方法会在 with 内的代码执行完毕后执行,一般用来处理一些善后收尾工作,比如文件的关闭,数据库的关闭等。
Python文件操作
##6、Python函数的参数
参数定义的顺序必须是:必选参数、默认参数(name = xxx)、可变参数(*args)、命名关键字参数( ... *, name, city) 和关键字参数(**kwargs)
Python函数参数详解
##7、命名空间与作用域
内置命名空间(print,type等自带的)、全局命名空间(整个文件生效),局部命名空间(函数内部生效)
全局作用域(包含内置命名空间与全局命名空间),局域作用域(只包含局部命名空间中的名字)
几个方法: global(), nonlocal():上层局部命名空间中的变量值(不可变类型)
命名空间与作用域
##8、闭包函数& 高阶应用
闭包函数 = 命名空间与作用域 + 函数嵌套 + 函数对象 结合体
核心点:名字的查找顺序以定义阶段为标准。当前命名空间没找到名字时往定义自己的命名空间查找名字。
“闭”函数指的是该函数定义在另一个函数体中
“包”函数指的是该内嵌函数包含对外层函数作用域名字的引用(不是对全局作用域,而是对定义内嵌函数名字的那一层函数局部命名空间中名字的引用)
闭包函数的作用:
1)在某些情况下我们需要使用闭包函数为内部函数进行参数的传递。
2)在不修改原本上线的功能函数内部代码以及不修改其调用方式前提下为其增添新的功能(装饰器的基础)
Ps:在闭包函数中,外层的封装函数命名空间中所有的变量都不会被销毁。
函数高阶应用与闭包
# 二、高阶特性
##1、单例模式
5种方法:模块引入,装饰器,重写__new__,
Python中的单例模式的几种实现方式的及优化
##2、装饰器
开放封闭原则,补充函数的功能。
模板:无参装饰器 + 有参装饰器
from functools import wraps
def outer(func): # 装饰器名字应该取好,func代表被装饰函数。
@wraps(func) # 这里主要完全将warpper的所有文档信息等等都与func保持一致。下面会讲
def warpper(*args,**kwargs): # warpper函数对应func,也就是被执行的函数。这里做对接
# 功能扩展区,函数运行前
res = func(*args,**kwargs) # 接收func的return值
# 功能扩展区,函数运行后
return res # 将func的返回值返回出去
return warpper
from functools import wraps
def outer(x):
def inner(func): # 装饰器名字应该取好,func代表被装饰函数。
@wraps(func) # 这里主要完全将warpper的所有文档信息等等都与func保持一致。下面会讲
def warpper(*args,**kwargs): # warpper函数对应func,也就是被执行的函数。这里做对接
# 功能扩展区,函数运行前
res = func(*args,**kwargs) # 接收func的return值
# 功能扩展区,函数运行后
return res # 将func的返回值返回出去
return warpper
return inner
Python三大器之装饰器
3、迭代器
1.迭代器(Iterator):必须有__next__方法才能被叫做迭代器。迭代器无法重复使用
2.可迭代对象(Iterable):必须有__iter__方法才能被叫做可迭代对象
五大基本容器数据类型(list
,tuple
,dict
,set
,str
)等都是属于可迭代对象。本身并不属于迭代器。文件句柄对象本身是属于迭代器。
for 循环就是为 Iterable 生成一个 Iterator。
Python三大器之迭代器
4、生成器
生成器是迭代器的一种,有着惰性求值、占用内存小的优势。
缺点:跟迭代器一样,只能使用一次。
生成器底层原理:函数状态被挂起;底层基于C语言,函数在栈帧上运行,栈帧分配在堆内存上,故栈帧可以独立于调用者存在。
生成器的栈帧对象比一般函数多一层封装,记录了上下文和运行的行数。
python中函数和生成器的运行原理
4、描述器
Python描述器详解
5、消费者模式
6、with上下文管理器原理与用法:
with后面的对象需要有__enter__()和 __exit__()方法,可以进行初始化和结果打扫。
8、python并发
Python并发编程理论篇