Py学习  »  Python

优雅的Python

Python技术博文 • 6 年前 • 920 次点击  

原文出处: JeffPaine   译文出处:0xFEE1C001  

如果说优雅也有缺点的话,那就是你需要艰巨的工作才能得到它,需要良好的教育才能欣赏它。

—— Edsger Wybe Dijkstra

以下是正文。


本文是Raymond Hettinger在2013年美国PyCon演讲的笔记(视频, 幻灯片)。

示例代码和引用的语录都来自Raymond的演讲。这是我按我的理解整理出来的,希望你们理解起来跟我一样顺畅!

提高可读性

  • 位置参数和下标很漂亮

  • 但关键字和名称更好

  • 第一种方法对计算机来说很便利

  • 第二种方法和人类思考方式一致

用关键字参数提高函数调用的可读性

更好的方法

第二种方法稍微(微秒级)慢一点,但为了代码的可读性和开发时间,值得。

装饰器和上下文管理

  • 用于把业务和管理的逻辑分开

  • 分解代码和提高代码重用性的干净优雅的好工具

  • 起个好名字很关键

  • 记住蜘蛛侠的格言:能力越大,责任越大

使用装饰器分离出管理逻辑

更好的方法

注意:Python 3.2开始加入了functools.lru_cache解决这个问题。

分离临时上下文

更好的方法

译注:示例代码在使用标准库decimal,这个库已经实现好了localcontext

如何打开关闭文件

更好的方法

如何使用锁

更好的方法

分离出临时的上下文

更好的方法

ignored是Python 3.4加入的, 文档。

注意:ignored 实际上在标准库叫suppress(译注:contextlib.supress).

试试创建你自己的ignored上下文管理器。

把它放在你的工具目录,你也可以忽略异常

译注:contextmanager在标准库contextlib中,通过装饰生成器函数,省去用__enter____exit__写上下文管理器。详情请看文档。

分离临时上下文

更好的写法

redirect_stdout在Python 3.4加入(译注:contextlib.redirect_stdout), bug反馈。

实现你自己的redirect_stdout上下文管理器。

简洁的单句表达

两个冲突的原则:

  • 一行不要有太多逻辑

  • 不要把单一的想法拆分成多个部分

Raymond的原则:

  • 一行代码的逻辑等价于一句自然语言

列表解析和生成器

更好的方法

第一种方法说的是你在做什么,第二种方法说的是你想要什么。

unpack序列

更好的方法


第二种方法用了unpack元组,更快,可读性更好。

更新多个变量的状态

更好的方法

第一种方法的问题

  • x和y是状态,状态应该在一次操作中更新,分几行的话状态会互相对不上,这经常是bug的源头。

  • 操作有顺序要求

  • 太底层太细节

第二种方法抽象层级更高,没有操作顺序出错的风险而且更效率更高。

同时状态更新

更好的方法

效率

  • 优化的基本原则

  • 除非必要,别无故移动数据

  • 稍微注意一下用线性的操作取代O(n**2)的操作

总的来说,不要无故移动数据

连接字符串

更好的方法

更新序列

更好的方法


推荐阅读:

用Python来分析股票|发现炒股软件里惊人内幕

诺贝尔奖得主教你如何分配炒股仓位 | python量化系列

(视频讲解!!!)python量化 | 10年翻400倍的炒股策略

Python初探之一

Python常用的一些技巧

写给Python初学者的设计模式入门

Python在金融,数据分析,和人工智能中的应用

Python的编码命名规则

python 数组的del ,remove,pop区别

[笔记]使用Python一步一步地来进行数据分析

提升 Python 编程效率的十点建议

Python的zip函数

如何优雅的使用Python

Python初学者的17个技巧

Python 环境搭建

文本编辑器你容易忽视的细节

Python生态系统

Python 使用断言的最佳时机

Python在金融,数据分析,和人工智能中的应用

爬虫-漫画喵的100行逆袭



特别说明:

该公众号创建的目的是希望能有好的资源大家一起学习,所以博文来源包括但不限于翻译、投稿和原创等方式,如果有优秀的文章也可以转载发布,但是我们会注明来源。所以您如果有好的资源可以联系我们,我们给予发布哦!如果之前的文章有任何的异议可以留言联系博主,如果觉得有转载但未声明来源出处的请及时联系,我们会申请版权或者及时删除。



网络来源:http://python.jobbole.com/88526/


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/r8gFuG3fim
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/3381
 
920 次点击