Python 高手编程系列三百四十一:有用的工具

前面的约定和实践的一部分可以使用下列工具来控制和处理。
• Pylint:一个非常灵活的源代码分析器。
• pep8 和 flake8:它们是小型的代码风格检查器,也是包装器,添加了一些更有用的
特性,例如静态分析和复杂度测量。
Pylint
除了一些质量保证方面的度量之外,Pylint 还允许你检查给定的源代码是否遵循某种
命名约定。它的默认设置对应于 PEP 8,Pylint 脚本会提供一份 shell 报告输出。
要安装 Pylint,你可以使用 pip,代码如下:
$ pip install pylint
安装完成后,pylint 这个命令就可用了,可以在一个模块上运行,也可以利用通配符
在多个模块上运行。我们在 Buildout 的 bootstrap.py 脚本上试用这个命令,代码如下:
$ wget -O bootstrap.py https://bootstrap.pypa.io/bootstrap-buildout.py -q
$ pylint bootstrap.py
No config file found, using default configuration
************* Module bootstrap
C: 76, 0: Unnecessary parens after ‘print’ keyword (superfluous-parens)
C: 31, 0: Invalid constant name “tmpeggs” (invalid-name)
C: 33, 0: Invalid constant name “usage” (invalid-name)
C: 45, 0: Invalid constant name “parser” (invalid-name)
C: 74, 0: Invalid constant name “options” (invalid-name)
C: 74, 9: Invalid constant name “args” (invalid-name)
C: 84, 4: Import “from urllib.request import urlopen” should be placed at
the top of the module (wrong-import-position)

Global evaluation

Your code has been rated at 6.12/10
Pylint 的实际输出要更长一些,这里只截取了其中一部分。
注意,Pylint 可能会给出不好的评分或抱怨。例如,import 语句没有被模块本身的代
码使用,这在某些情况下是完全可以的(使其在命名空间中可用)。
如果一个库采用混合大小写为方法命名,那么对其调用可能也会降低评分。无论如何,
总体评价并不那么重要。Pylint 只是一个工具,指出可能的改进之处。
要想对 Pylint 进行微调,第一件要做的事就是,使用-generate-rcfile 选项在项
目目录下创建一个.pylintrc 配置文件,如下所示:
$ pylint --generate-rcfile > .pylintrc
这个配置文件是自带说明的(self-documenting,每个选项都用注释说明),应该已经包
含所有可用的配置选项。
除了检查是否遵守某种任意的编码标准,Pylint 还可以给出有关整体代码质量的额外
信息,例如:
• 代码重复度量。
• 未使用的变量和导入。
• 缺失的函数、方法或类的文档字符串。
• 函数签名过长。
默认启用的可用检查列表非常长。重要的是要知道,有些规则是任意的,不能轻易应
用到所有代码库。要记住,一致性永远比遵守某种任意的标准更有价值。幸运的是,Pylint
是可调节的,所以如果你的团队使用一些与默认不同的命名和编码约定,你可以轻松配置
来检查与这些约定的一致性。
pep8 和 flake8
pep8 这个工具只有一个目的:它仅提供对 PEP 8 代码约定的风格检查。这是它与 Pylint
的主要区别,后者具有许多额外的功能。对于那些仅对 PEP 8 标准的自动化代码风格检查
感兴趣的程序员来说,这是最佳选择,不需要任何额外的工具配置(像 Pylint 那样)。
pep8 可以用 pip 安装,代码如下:
$ pip install pep8
在Buildout的bootstrap.py脚本上运行pep8,它会给出不符合代码风格之处的简短列表:
$ wget -O bootstrap.py https://bootstrap.pypa.io/bootstrap-buildout.py -q
$ pep8 bootstrap.py
bootstrap.py:118:1: E402 module level import not at top of file
bootstrap.py:119:1: E402 module level import not at top of file
bootstrap.py:190:1: E402 module level import not at top of file
bootstrap.py:200:1: E402 module level import not at top of file
与 Pylint 的输出的主要区别在于其长度。pep8 只关注风格,所以它不会给出任何其他
警告,例如未使用的变量、太长的函数名称或文档字符串缺失。它也不会给出任何评分。
它真的很有意义,因为不存在部分一致性。任何对风格指南的违背 — 即使是最小的违
背 — 也会使代码立刻变得不一致。
pep8的输出比PyLint更简单,也更容易解析,所以如果你想要与一些连续集成解决方案(例
如 Jenkins)集成,那么选择 pep8 可能更好。如果你想要一些静态分析的功能,那么可以使用
flake8包,它是pep8和其他一些工具的包装器,可以轻松扩展,并提供了更丰富的功能,包括:
• McCabe 复杂度测量。
• 利用 pyflakes 做静态分析。
• 利用注释禁用整个文件或单行代码。
小结
本章通过 Python 官方风格指南(PEP 8 文档)来介绍广受认可的编码约定。除了官方
风格指南,介绍了一些命名建议,可以让你以后的代码更加明确;还介绍了一些有用的工
具,在保持代码风格一致方面不可或缺。
所有这些内容都是为本书第一个实用主题做准备 — 编写并分发 Python 包。下一章我
们将学习如何在公共 PyPI 仓库中发布我们自己的包,以及在私人组织中如何利用打包生态
系统的力量。

  • 12
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值