语言、语法糖相关
python2 3 区别
map filter,由function变为class,前者返回列表,后者为object
print由命令变为函数
编码由ASCII变为utf8
xrange
- 要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间。
- range创建列表,xrange是生成器
- 3只保留了生成器的方式并命名为range
除法 1/2 = 0 0.5
滑动窗口算法
abc
- 注解abstractmethod,抽象基类
标记清除
- 对执行删除(-1)后的每个引用-1,为0的放到死亡容器,否则放到存活容器
- 循环存活容器,复活死亡中的变量放到存活容器内
- 删除死亡容器内的所有对象
分代
- 新创建的对象做为0代。每执行一个【标记-删除】,存活的对象代数就+1
- 代数越高的对象(存活越持久的对象),进行【标记-删除】的时间间隔就越长
- 一个对象10次检测都没给它干掉, 就认定这个对象一定很长寿, 就减少这货的”检测频率”
触发垃圾回收
- 调用gc.collect()
- GC达到阀值时
- 程序退出时
intern机制
copy deepcopy
- 复制的值是不可变对象(数值,字符串,元组),对象的id值与等式左边的id值相同。
- 复制的值是可变对象(列表和字典)
- 浅拷贝两种情况:
- 复制的 对象中无 复杂 子对象,浅复制的值改变也并不会影响原来的值反之也不影响
- 复制的对象中有 复杂 子对象, 改变原来的值 中的复杂子对象的值 ,会影响浅复制的值
- 浅拷贝两种情况:
cookie和session
- session 在服务器端,cookie 在客户端(浏览器)
- session id 是存在 cookie 中
- 浏览器禁用了 cookie ,同时 session 也会失效
- cookie安全性比session差
正则
- 正则表达式匹配中,(.)和(.?)匹配区别?
- 贪婪、非贪婪
- 正则re.complie
- re.compile是将正则表达式编译成一个对象,加快速度,并重复使用
- 正则表达式匹配中,(.)和(.?)匹配区别?
动态类型dynamic typing
- 将string传入mod,compilier并不会报错,仍然是原来compile出来的步骤。
- mod(“%s%s”, (“py”,”thon”) )结果将是python,在c中,遇到BINARY_MOULO指令操作,如果是string类型则直接调用PyString_Format()。
一切发生在运行时、命名空间。
命名空间分模块、类、方法。
编译只是从将代码在运行时转成成code object,当执行时转成function object。
def是一个assignment function(将return 的结果assign给变量),遇到def 的时候实则就是call这个function并对参数进行assign。
类在创建时就开始执行,在一个字典所表示的命名空间中执行。这个命名空间用来创建类对象。
都是 对象/引用。变量只是名称,不是容器。字典中将名称映射到对象上。
三个scopes,local,global:module,builtin
not pthon object hooks:1,赋值,赋值将改变命名空间,而非对象自身 2,类型检查 3,is运算 4,and or not 都是布尔运算 5,调用,需要实现getattr来返回属性对象,该属性对象在call时执行某方法
如果要对object 移动,需要delete并清楚所有的references。
弱引用是当object删除之后被通知,即callback。
互相引用的reference cycle–>需要cycle gc
Cython PyPy
- Cpython中,PyObject都是以struct实现,包含type pointer、reference counting或其他C type。PyType struct有对type的一些描述信息。
常用到的文本提取,任意字符串
- .* .*?
编译 解释
- compiler部分很少,interpreter工作量远远多。
- Python interpreter是一个virtual machine(模拟物理机),是个stack machine(操作stacks),和register machine(从内存不同位置读写)不同。
- 且是byte interpreter,input是instruction sets,元素为byte codes,lexing&parsing将python codes 转为byte codes。相当于C codes和assembly codes。
本文链接: https://satyrswang.github.io/2021/04/05/python/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!