专栏首页Python小屋Python语言编程规范与优化建议

Python语言编程规范与优化建议

没有规矩,不成方圆。代码任何一种语言都有一些约定俗成的编码规范,Python也不例外。Python非常重视代码的可读性,对代码布局和排版有更加严格的要求。虽然一些大型软件公司对自己公司程序员编写的代码在布局、结构、标识符命名等方面有一些特殊的要求,但其中很多内容和思想是相通的,目的也是一致的。这里重点介绍Python社区对代码编写的一些共同的要求、规范和一些常用的代码优化建议,最好在开始编写第一段代码的时候就要遵循这些规范和建议。

(1)严格使用缩进来体现代码的逻辑从属关系。Python对代码缩进是硬性要求,这一点必须时刻注意。如果某个代码段的缩进不对,那么整个程序就是错的,要么是语法错误无法执行,要么是逻辑错误导致错误结果。

(2)每个import语句只导入一个模块,并且要按照标准库、扩展库、自定义库的顺序依次导入。另外,尽量避免导入整个库,最好只导入确实需要的对象。

(3)最好在每个类、函数定义后增加一个空行,在不同功能代码段之间增加一个空行,在运算符两侧各增加一个空格,逗号后面增加一个空格。按照这样的规范写出来的代码布局和排版比较松散,阅读起来更加轻松。不论是前面第一条讲的缩进,还是这里谈的空行与空格,主要是提高代码可读性,正如“The Zen of Python”所说“Sparse is better than dense.”、“Readability counts.”。稍微有点例外的是,在正常的赋值表达式中等号两侧都是各增加一个空格,但在调用函数并使用关键参数时一般并不在等号两侧增加空格。正所谓“张而不弛,文武弗能也;弛而不张,文武弗为也;一张一弛,文武之道也。”

(4)尽量不要写过长的语句。如果语句过长,可以拆分成多个短的语句,以保证代码具有较好的可读性。如果语句确实太长而超过屏幕宽度,最好使用续行符(line continuation character)“\”,或者使用圆括号将多行括起来表示是一条语句。

(5)对于复杂的表达式,建议在适当的位置使用括号使得各种运算的隶属关系和顺序更加明确,正如“The Zen of Python”所说“Explicit is better than implicit.”。

(6)对关键代码进行必要的注释。统计数据表明,一个可读性较好的程序中应包含大概30%以上的注释。在Python中有两种常用的注释形式:#和三引号。某行代码中“#”之后的内容将被看做是注释而不执行,三引号则常用于大段说明性文本的注释。

(7)在开发速度和运行速度之间尽量取得最佳平衡。内置对象运行速度最快,标准库对象次之,用C或Fortran编写的扩展库速度也比较快,而纯Python的扩展库往往速度慢一些。因此,在开发项目中,应优先使用Python内置对象、函数和类型,其次考虑使用Python标准库提供的对象,最后考虑使用第三方扩展库。然而,有时候只使用内置对象和标准库对象的话,很可能无法直接满足需要。这时候我们有两个选择,一是使用内置对象和标准库对象编写代码实现特定的逻辑,二是使用特定的扩展库。至于如何取舍,最终还是取决于业务逻辑的复杂程度和对速度的要求这两者之间的平衡。

(8)根据运算特点选择最合适的数据类型。如果定义一些数据只是用来频繁遍历而不需要进行增加、删除或修改操作,最好优先考虑元组或集合。如果需要频繁地测试一个元素是否存在于一个序列中并且不关心其位置,就尽量采用字典或者集合,因为列表和元组的in操作时间复杂度是线性的,而对于集合和字典却是常数级的,与问题规模几乎无关。

(9)充分利用逻辑运算符关系运算符以及逻辑运算符and和or的短路求值特点,合理组织条件表达式中的多个条件,减少不必要的计算。

(10)充分利用生成器对象或类似迭代对象的惰性计算特点,减少对内存的占用,降低空间复杂度。

(11)尽量减少内循环中的无关计算,尽量往外层提取。

有很多成熟的工具可以检查Python代码的规范性,例如pep8、flake8等等。可以使用pip install -U pep8来安装pep8工具,然后使用pep8 test.py来测试test.py文件中Python代码的规范性,pep8常用的可选参数有--show-source、--first、--show-pep8等等。也可以使用pip install pylint安装Python代码检查工具pylint,然后使用命令行工具pylint来检查程序的规范性,或者使用可视化工具pylint-gui来完成同样的任务。flake8结合了pyflakes和pep8的特点,可以检查更多的内容,优先推荐使用,使用pip install flake8可以直接安装,然后使用flake8 test.py即可检查test.py的规范性。

本文分享自微信公众号 - Python小屋(Python_xiaowu),作者:董付国

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-12-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python回文判断代码优化与6个思考题

    送个福利:清华大学出版社和新宝图书专营店联合推出正版特价图书《Python程序设计开发宝典》,原价69元,特价47.6元,详情:https://detail.t...

    Python小屋屋主
  • Python+pandas时间序列对象常用操作

    很久很久以前,曾经有人问过我,为啥要贴代码截图,而不是贴代码,这不是给学习者制造困难吗。其实不是。我的想法是这样的,大家最好能够跟着代码自己敲一下,这样可以加深...

    Python小屋屋主
  • Python+tkinter打造类似于IDLE的代码编辑器(83行源码)

    使用tkinter设计一个类似于IDLE的Python代码编辑器,可以实现代码自动缩进、自动反缩进以及内置函数、关键字、字符串和注释的自动着色。

    Python小屋屋主
  • [读书笔记]C#学习笔记一: .Net Framwork

    一枝花算不算浪漫
  • 提升 Python 编程效率的十点建议

    程序员的时间很宝贵,Python这门语言虽然足够简单、优雅,但并不是说你使用Python编程,效率就一定会高。要想节省时间、提高效率,还是需要注意很多地方的。 ...

    编程派
  • 我在编程20年中学到的5件事 - DaedTech

    物流IT圈
  • 一次代码评审,差点过不了试用期!

    代码是给机器运行的,但同样也是给人看的,并且随着上线还需要由人来运维。那么写出可扩展、易维护、好读懂的代码就显得非常重要。

    小傅哥
  • 程序员垃圾代码分类指南

    上一篇文章《程序员垃圾分类图鉴》和大家聊了聊程序员的垃圾分类,有的程序员直呼太真实,有的程序员觉得太讽刺,不应该给程序员进行这样的分类。

    马哥linux运维
  • 让你虎躯一震的垃圾代码分类指南

    其实每个行业都会存在各种各样糟糕的情况,娱乐性的分类会将问题放大,让我们能站出来用另一个视角来看看,什么类型的程序员是我们应该避免的。

    帅地
  • 程序员垃圾代码分类指南

    上一篇文章《程序员垃圾分类图鉴》和大家聊了聊程序员的垃圾分类,有的程序员直呼太真实,有的程序员觉得太讽刺,不应该给程序员进行这样的分类。

    纯洁的微笑

扫码关注云+社区

领取腾讯云代金券