1. 对象分类
可更改:list、dict、set
不可更改:strings、tuples、numbers、
2. python自省
自动获得对象的类型,比如:type、dir、getattr、hasattr、isinstance
3. 列表-字典推导式
字典推导式:d = {k: v for k, v in dic}
4. 单双下划线
单:指定私有变量
双:区别和其他类相同的命名,访问:对象名._类名_***
5. 迭代器和生成器
迭代器:列表生成式;数据结构:列表;占用大量内存空间;
生成器:数据结构:生成器;边循环,边计算;
6. 装饰器
抽离出大量函数中与函数功能本身无关的雷同代码并继续重用;为已经存在的对象添加额外的功能;
适用:插入日志、性能测试、事务处理等
7. 新式类和旧式类
新式类:继承依据C3
旧式类:深度优先
8. 单例模式
保证系统中一个类只有一个实例且该实例易于外界访问,方便地控制实例的个数并节约系统资源。
8.1 __new__方法
1 class Singleton(object): 2 def __new__(cls, *args, **kw): 3 if not hasattr(cls, '_instance'): 4 orig = super(Singleton, cls) 5 cls._instance = orig.__new__(cls, *args, **kw) 6 return cls._instance 7 8 class MyClass(Singleton): 9 a = 1
8.2 共享属性-所有实例的__dict__指向同一个字典
1 class Borg(object): 2 _state = {} 3 def __new__(cls, *args, **kw): 4 ob = super(Borg, cls).__new__(cls, *args, **kw) 5 ob.__dict__ = cls._state 6 return ob 7 8 class MyClass2(Borg): 9 a = 1
8.3 装饰器版本
1 def singleton(cls): 2 instances = {} 3 def getinstance(*args, **kw): 4 if cls not in instances: 5 instances[cls] = cls(*args, **kw) 6 return instances[cls] 7 return getinstance 8 9 @singleton 10 class MyClass: 11 ...
8.4 import
1 # mysingleton.py 2 class My_Singleton(object): 3 def foo(self): 4 pass 5 6 my_singleton = My_Singleton() 7 8 # to use 9 from mysingleton import my_singleton 10 11 my_singleton.foo()
9. GIL
线程全局锁:为了保证线程安全而采取的独立线程运行的限制。
IO密集型:多线程
CPU密集型:多线程的优势不大,会因争夺资源而变慢
解释多线程为什么慢:https://www.oschina.net/translate/pythons-hardest-problem
10. 协程
用户自己控制切换的时机,不需要陷入系统的内核态。比如:yield
11. 函数式编程 + lambda
filter:过滤
map:对一个序列的每一项一次执行函数
reduce:对一个序列的每一项迭代调用函数
12. 拷贝
浅拷贝:拷贝对象的引用和值,原值修改后新值不会改变外层元素;
深拷贝:拷贝所有的值,原值修改后不会影响新值;
13. 垃圾回收
引用计数:有循环引用的缺点
标记-清除:按需分配,遍历以对象为节点、引用为边的图,清除没标记的对象;
分代技术:以空间换时间,索引数越大,对象存活时间越长。