今日内容:
1、猴子补丁
2、内置函数
3、垃圾回收机制
4、并发编程(******)
进程起源操作系统=>操作系统的发展史
多道技术
====================> 1 猴子补丁 <======================
注意: 补丁要在入口去写(即 用之前就已经写好了)
import json
import ujson # pip3 install ujson
def monkey_patch():
替换名字
json.__name__ = ujson.__name__
替换功能
json.dumps = ujson.dumps
json.loads = ujson.loads
====================> 2 内置函数 <======================
class Foo:
pass
print(callable(Foo))
print(chr(67))
print(ord("C"))
print(divmod(10,3))
l=['aaa','bb','ccc']
l={'k1':111,'k2':2222}
for i,item in enumerate(l):
print(i,item)
s1=set({1,2,3})
s1=frozenset({1,2,3})
s1.add(4)
print(s1)
def func():
x=111
print(globals())
print(locals())
func()
print(pow(10,2,3)) # 10 ** 2 % 3
l1 = [1, 2, 3, 4, 5, 6]
l2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
s = slice(0, 4, 2)
print(l1[s])
print(l2[s])
x = "hello"
y = [111, 222, 333]
res=zip(x,y)
print(list(res))
m=__import__("time")
m.sleep(10)
====================> 3 垃圾回收机制 <======================
引用计数:一个变量值的引用计数为0时,才会被当作垃圾回收
问题1:循环引用=》内存泄漏
标记-清除
问题2:效率问题
分代回收
补充: 在python中, 变量名 与 变量值 分开存放:
变量名字 都是存放在 栈区
变量值 都是存放在 堆区
堆区中的列表 中 存放的是值的内存地址
栈区的中的名字中 绑定的是 堆区中列表的地址
直接引用 与 间接引用:
直接引用: 直接从栈区引出去的
间接引用: 直接从堆区引出去的
循环引用: 堆区中的值 相互引用
解决循环引用 引起的垃圾问题: 必须要留一个 直接引用,这样存在循环引用 也无所谓
有根则活, 无根则死
l2 = [20, 30] # 列表本身被变量名l2直接引用,包含的元素被列表间接引用
x = 10 # 值10被变量名x直接引用
l1 = [x, l2] # 列表本身被变量名l1直接引用,包含的元素被列表间接引用
=======================> 4 进程 <========================
1、程序
程序就是一堆代码文件
2、进程
进程一个抽象的概念
进程指的是程序的运行过程
进程是操作系统最核心的概念
3、操作系统
1、操作系统的作用
1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口
2:管理、调度进程,并且将多个进程对硬件的竞争变得有序
2、多道技术
ps:
串行:一个运行完毕再运行下一个
并行:多个进程是真正意义上一起运行
并发:看起来是同时运行的,本质还是一个个的运行
进程彼此之间的内存空间隔离,而且是物理隔离
补充:
虽然操作系统留出 各种接口,但是还是很复杂,对于程序员不友好
所以为了使用的简便性, 需要在用户 与 操作系统 之间 继续封装一层
解释器就是这继续封装的一层
python解释器 就是调用操作系统的各种接口
python解释器 就是将python的语句, 通过调用各种操作系统的接口 实现相应的功能
有python解释器时:程序员 打交道的是 python解释器(得照着python的规则[即语法],才能调到操作系统的功能)
由 python 解释器 和 操作系统打交道
没有python解释器时:程序员和 shell解释器打交道(和 python解释器一样作用)
shell解释器 和 操作系统打交道
并发的核心就是 :来回切进程
8-19-猴子补丁、内置函数、垃圾回收、并发编程
最新推荐文章于 2025-05-24 10:42:46 发布