当前位置: 首页 > 科技观察

干货分享:Python开发进阶技巧

时间:2023-03-19 14:50:10 科技观察

在这篇文章中,我列举了几种Python进阶技巧:1.contextmanager在编写Python代码时,往往会把一系列的操作放在一个语句块中。Python2.5增加了with语法来实现contextManage功能,代码可读性更强,bug更少。最常见的例子是开放的。如果不使用with,就这样使用open:如果使用with,可以简化为两行:执行完缩进的代码块后,文件会自动关闭。创建上下文管理器实际上是创建一个类并添加__enter__和__exit__方法。看一下open的上下文管理功能是如何实现的:自定义上下文管理器确实很方便,但是Python标准库也提供了一个更易用的上下文管理器工具模块contextlib,它是通过generator实现的,我们不thavetocreateclasses__enter__和__exit__是两个特殊方法:yield关键字将上下文分为两部分:yield之前是__init__中的代码块;yield之后其实就是__exit__中的代码块;yieldgenerated值绑定到with语句的as子句中的变量(如果没有生成,则没有as子句)。2.总排序。比较自定义对象,需要添加__lt__、__le__、__gt__、__ge__、__eq__等方法。如果使用total_ordering,只需要定义__eq__和__lt__,__le__,__gt__,__ge__之一:3.有时候BUG隐藏的太深,需要清晰的展示上下文帮助判断。用pdb调试不方便,用print也不直观。您可以使用以下函数获取当前调用堆栈:4.inspect。有时候我们想查看一个对象的一些信息或者做一个类型检查,这就是内省(检查一个东西以确定它是什么,它知道什么,它能做什么):在实际工作中还有什么意思,Get通过自省方法的参数,从而设置缓存的key,比如flask-cache(https://github.com/thadeusb/flask-cache/blob/master/flask_cache/__init__.py#L418)和douban-mc(https://github.com/douban/douban-mc/blob/master/douban/mc/decorator.py#L39)5.Mixin模式。什么是先看《Mixin是什么概念?》:如果我们想通过python内置类型Dict来存储数据,写好的类可以混入DictMixin:PS:如果要兼容Python2.6及以下和Python3,您可以使用collections.MutableMapping:但是MutableMapping需要额外实现__iter__和__len__。PPS:MutableMapping是一个学习实现抽象类的例子:它继承了Iterable和Sized,iterable需要你通过abstractmethod定义__iter__方法,Sized需要你定义__len__方法,否则会提示:TypeError:Can't用抽象方法__iter__,__len__实例化抽象类MyDict