请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册
[paragraph]
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的规范性。
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册