之前在组里分享过,后端那些事,有兴趣可以看看。

要想精通python,写的代码首先得pythonic,自己闭门造车肯定不行,肯定需要研读牛B的开源代码,在这过程中会遇到python的许多高阶用法

1.装饰器 装饰器在框架中运用的很多,比如flask_login,要精通至少很随意的写出满足需求的装饰器,用装饰器肯定需要functools模块的支持

2.生成器 说道生成器就自然地联系到各种推导式(列表,元祖,字段,集合),那肯定也要提到itertools模块,contextlib标准库中是个典范,说到contextlib就需要提到with协议,迭代器协议,以及标准库中的哪些实现了它们,如文件描述符,线程锁,继续延伸的话需要了解greenlet提供的协程,那就不得不提gevent,eventlet

3.描述符 这你就得知道所有的函数其实都是描述符,property,classmethod,staticmethod都是通过描述符实现的,那就得提到werkzeug和bottle都提供的cached_property,都是访问属性的就得提到

__getattr__和__getattribute__,知道在合适的时候定义合适的方法简化流程

4.元类 其实这玩意用处很大,如sqlalchemy,django的orm中field的定义都用到了它,那你得知道当python解析py时,发现__metaclass__的时候就会调用元类的__new__和__init__,如果你理解元类的__new__和__init__的第一个参数都是类(而不是self)那元类就差不多了

5.多线程 虽说python由于gil的限制不能利用多核,但在处理io密集型的任务还是有很大好处的,

那得知道threading.RLock是线程可重入锁,daemon thread的用处(python执行环境会等待所有非daemon thread的结束),Queue是线程安全的锁,logging是线程安全的日志模块,还有线程池也要熟悉

6.其它 如python2,6/7包含了不少新特性,如abc模块的抽象方法机制,collections提供的有用容器,python中的编码问题,super为啥需要两个参数,而3不需要参数,经典的闭包问题,NotImplemented和NotImplementedError的区别,多继承的mro问题,相对导入原理(__name__,如果看最新开源代码,基本都是相对导入)......

其实还有很多,但更多的是和业务相关,比如正则表达式,那至少得知道贪婪,非贪婪,命名组等。搞服务器开发,socket,twisted,gevent肯定要精通。搞web开发,django,flask,tornado得熟悉。。。。