社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

优雅的Python

Python技术博文 • 7 年前 • 1103 次点击  

原文出处: 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
 
1103 次点击