数据类型及变量
引用
|
|
涉及python中的引用以及可变量与不可变量的知识
字符串格式化
|
|
|
|
- __foo__: 一种约定,python内部的名字,用来区别用户自定义的名字,以防冲突
- _foo: 一种约定,程序员用来指定私有变量的形式
- __foo: 真正的私有变量,会变成_classname__foo
is与==
|
|
类相关
__new__与__init__
- __new__是一个类方法,__init__是一个实例方法
- __new__返回一个创建的实例,__init__什么都不返回
- __new__执行后__init__才执行
类的各种方法
|
|
\ | 实例方法 | 类方法 | 静态方法 |
---|---|---|---|
a = A() | a.foo(x) | a.class_foo(x) | a.static_foo(x) |
A | 不可用 | A.class_foo(x) | A.static_foo(x) |
实例方法的本质是foo(a, x),类方法的本质是class_foo(A, x),静态方法的本质是普通方法,只是作用域不同
类的各种变量
|
|
单例
自省机制
自省就是程序执行时能知道对象的类型。
|
|
推导式
|
|
迭代器与生成器
|
|
- 迭代器的本质是: __iter__和__next__
- 生成器的本质是: yield
函数
*args和**kwargs
|
|
装饰器
|
|
闭包
- 必须有一个内嵌函数
- 内嵌函数必须引用外部函数中的变量
- 外部函数的返回值必须是内嵌函数
lambda表达式
|
|
函数式编程
|
|
鸭子类型
作用域
- 本地作用域(local)
- 当前作用域被嵌入的作用域(enclosing local)
- 全局/模块作用域(global)
- 内置作用域(built-in)
全局解释器锁(GIL)
协程
拷贝
|
|
垃圾回收机制
GC主要使用引用计数(reference counting)来跟踪和回收垃圾。在引用计数的基础上通过”标记-清除”(mark and sweep)解决容器对象可能产生的循环引用问题,通过”分代回收”(generation collection)以空间换时间的方法提高垃圾回收效率。
引用计数
PyObject是每个对象必有的内容,其中ob_refcnt就是引用计数器。当一个对象有新的引用时,ob_refcnt就增加,当引用它的对象被删除时,ob_refcnt就减少。引用计数器为0时,该对象的生命就结束了。
- 优点
- 简单
- 实时性
- 缺点
- 维护引用计数消耗资源
- 循环引用
标记-清除机制
基本思路是先按需分配,等内存空间不够时从寄存器或程序栈上的引用出发,遍历以对象为节点,以引用为边构成的图,把所有可访问的对象打上标记,然后清扫一遍内存空间,把所有没标记的对象清除。
分代回收
分代回收的基本思想: 将系统中的所有内存块根据其存活时间分为不同的集合,每个集合就成为一个代,垃圾回收频率随着“代”的存活时间的增大而减小,存活时间通常利用经过几次垃圾回收来衡量。