CG机制
python的垃圾回收机制,简称GC
python中主要通过三种方式解决垃圾回收的方式:
1. 引用计数:如果有新的引用指向对象,对象引用计数就加一,引用被销毁时,对象引用计数就减一,当用户的引用计数为0 时,该内存被释放
2. 标记清除:首先标记对象(垃圾检测),然后清除垃圾(垃圾回收)
初始所有对象标记为白色,并确定根节点对象(这些对象是不会被删除的),标记它们为黑色(表示对象有效)。
将有效对象引用的对象标记为灰色(表示对象可达,但它们所引用的对象还没有检查)
检查完灰色对象引用的对象后,将灰色标记为黑色.重复直到不存在灰色节点为止,最后白色节点都是需要清除的对象
3. 分代回收:垃圾回收器会更频繁的处理新对象。一个新的对象即是你的程序刚刚创建的,而一个老的对象则是经过了几个时间周期之后仍然存在的对象。
python会在当一个对象从零代移动到一代,或是从一代移动到二代的过程中提升这个对象。
三元表达式,列表生成式,生成器表达式
1. 三元表达式:是python为我们提供的一种简化代码的解决方案
res = 条件成立时返回的值 if 条件 else 条件不成立返回的值
2. 列表生成式:相当于把for 循环写进列表中,一行代码实现一个功能
res = [x for x in range (10 )]
print (res)
3. 生成器表达式:相当于把上述[]换成(),生成器表达式返回的是一个生成器对象,对比列表生成式更节省内存(一次只产生一个值在内存中)
递归函数
递归函数:在调用一个函数的内部又调用自己,所以递归的本质就是一个循环的过程,它的大前提就是递归带调用一定要在某一层结束,如果不结束,会形成死循环。
递归分为两个阶段:回溯,向下一层一层挖井
递推,向上一层一层返回
l1 = [[1 ,2 ],3 ,[4 ,[5 ,[6 ,7 ]]]]
def func (l1 ):
for x in l1:
if type (x) is list :
func(x)
else :
print (x,end='' )
func(l1)
单例模式
1. 属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例
class myClass (object ):
instance = None
def __init__ (self, ip, port ):
self.ip = ip
self.port = port
@classmethod
def single (cls ):
if not cls.instance:
cls.instance = myClass('127.0.0.1' , 8000 )
return cls.instance
obj1 = myClass.single()
obj2 = myClass.single()
print (obj1, obj2)
class MateClass (type ):
instance = None
def __call__ (self, *args, **kwargs ):
if self.instance:
return self.instance
obj = super ().__call__(*args, **kwargs)
self.instance = obj
return obj
class single (metaclass=MateClass):
def __init__ (self, name ):
self.name = name
obj1 = single('summer' )
obj2 = single('jer' )
print (id (obj1))
print (id (obj2))
print (obj1.name)
print (obj2.name)
CBV源码简述
根据前端请求方式的不同自动匹配执行对应的方法
在url路由中的views.类名.as_view()的源码下可以看到是被@classonlymethod修饰的类方法,内部定义闭包函数传参并返回闭包函数名,在django启动的时候回执行urls的as_view()产生变形为views.view,在浏览器提交请求的时候就会触发view方法,通过view下的self使用类的对象,返回self.dispatch属性,在父类中的dispatch函数通过反射机制就是通过字符串操作对象属性,只有在被完成后才会真正执行,就是可以事先写好逻辑接口,事后实现接口功能
元类,魔法方法,猴子补丁
1. 元类:创建类的类称为元类,函数type 就是一个元类
2. 魔法方法
__init__ 类加括号 实例化对象的时候会自动触发
__call__ 对象加括号的时候会自动触发,并且可以传参数
__str__ 执行打印操作的时候会触发 返回字符串
__new__ 创建对象时为对象分配空间,在实例化之前被调用
3. 猴子补丁
猴子补丁主要的功能就是动态的属性替换,猴子补丁允许运行期间动态修改一个类或模块
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现