「Fluent Python」今年最佳技术书籍

Fluent Python 读书手记java

  • Python数据模型:特殊方法用来给整个语言模型特殊使用,一致性体现。如:__len__, __getitem__
  • AOP: zope.inteface
  • 列表推导(list comprehensive)和 表达式生成器(generator expression),分别用 [...] 和 (...)表未。后者是迭代生成,更节省内存。
  • 元组tuple两大功能特性:不可变、用做数据记录结构(位置信息)。元组里的元素最好也是不可变数据。
  • array 和 列表相比的区别和优点。array只能存单一数据类型,好比array[int],而列表是任何数据类型的容器。可是array在存储上更节约内存,由于实现就是分配连续的内存记录二进制数据表示。
  • dict的 setdefault,能够方便处理可能不存在键的值操做。
  • dict的键是可散列的,知足三个条件。支持hash()函数,经过__hash__实现;经过 __eq__ 检测相等性;若 a == b,则 hash(a) == hash(b)
  • 接收函数参数或者返回函数的函数能够称为高阶函数
  • 自定义类中重写 __call__( ) 方法,能够把类实例变为可直接调用的函数对象。
  • python中的inspect模块,提供了不少内省方法,像java的reflect包。six库。
  • operator 和 functools 模块中有不少定义好的高阶函数能够,方便编写函数式代码风格。
  • 抽象类能够继承abc.ABC,使用 @abstractmethod 修饰。
  • 由于在Python中函数也是对象,能够用来传参和返回,因此23经典设计模式在Python中可能不彻底适用,或者以更简单的方式使用。
  • 装饰器函数是导入模块时(load module)时就执行,而不是运行时执行。这个特性可用于框架处理一些启动注册的工做。
  • 在嵌套函数中,若是要引用外部的不可变象并从新赋值,则须要使用 nolocal 关键字声明变量再操做。
  • functools.lru_cache 能够缓存某个计算代价很大的函数结果。
  • functools.singledispatch 能够写出相似Java中方法重载的代码
  • @classmethod 和 @staticmethod 的区别。前者第一个参数是Class自己,后者就是一普通函数。
  • @Property 设置getter/setter属性
  • Python中接口,是指“鸭子类型”协议,即一个类具备类似的行为,但跟继承没有什么关系。可是抽象类(接口)在现实世界中是存在的,因此能够经过 abc.ABC 来定义抽象基类。
  • 不要直接继承内置的类,好比 list, dict。由于继承内置类,子类重写的方法若是经过python协议调用,不会使用子类的方法。好比 A extends list, A重写了 __len__,可是调用 len(a) 仍是使用list的内置方法。解决办法是使用 pypy中的类,好比collections.abc中的类。
  • for/while/try - else 更应该按 for/while/try - then 语义理解更好些。
  • GIL指CPython实现一次只容许使用一个线程执行Python字节码,由于CPython解释器原本不是安全的。可是对于IO密集型场景无害,由于标准库中全部阻塞IO都会释放GIL(global interpreter locl)。可是CPU密集型计算则会有影响。
相关文章
相关标签/搜索