PEP 8与命名最佳实践
命名风格
- 驼峰式命名法
- 混合式命名法
- 大写或者大写加下划线
- 前缀和后缀
应用范围:变量、函数和方法、property、类、模块、包
变量
- 常量:大写加下划线
- 共有和私有变量:加下划线
函数和方法
- 小写加下划线(java一般使用驼峰表示法)
特殊方法
- 双下划线开始双下划线结束:比如
__init__, __repr__
参数
参数名称使用小写
property
- 小写或者小写加下划线
类
- 驼峰命名法
模块和包
- 模块名称都使用小写,不带下划线
- 如果模块式包的私有模块,则添加一个前缀下划线
命名指南
-
用
has
和is
前缀命名布尔元素class DB: is_connected = False has_cache = False
-
用复数命名集合变量
class DB: connected_users = ['Tarek'] tables = { 'Customer':['id', 'first_name', 'last_name'] }
-
用显示名称命名字典
persons_addresses = {'Bill':'6565 Monty Road', 'Pamela':'45 Python street'} persons_addresses['Pamela']
-
避免通用名称
-
避免现有名称
参数的最佳实践
函数和方法的签名式代码完整性的保证,他们驱动函数和方法的使用并构建其API。可以通过3个简单的规则来实现。
- 通过迭代设计构建参数
- 新人参数和测试
- 小心使用魔法参数
*args
和**kwargs
通过迭代设计构建参数
如果每个函数都有一个固定的、定义明确的参数列表,那么代码的鲁棒性会更好,但是这在第一个版本中无法完成,所以必须通过迭代设计来构建
例如,如果添加了一些参数,他们应该尽可能的有默认值,以避免任何退化
class Service:
def _query(self, query, type):
print("done")
def execute(self, query):
self._query(query, 'EXEXUTE')
import logging
class Service:
def _query(self, query, type, logger):
print("done")
def execute(self, query, logger=logging.info):
self._query(query, 'EXEXUTE', logger)
信任参数和测试
**小心使用魔法参数*args
和\*\*kwargs
**
魔法参数*args
和**kwargs
可能会破坏函数或方法的鲁棒性
类的名称
-
使用后缀表示其类型或特性
SQLEngine MimeTypes StringWidget TestCase
-
对于基类和抽象类,使用一个Base或者Abstract前缀
-
最重要的式要和类的属性保持一致。
模块和包的名称
- 小写
有用的工具
Pylint
:一个非常灵活的源代码分析器pep8
和flake8
:小型的代码风格检查器,也是包装器,添加了一些更有用的特性,例如静态分析和复杂度测量。
Pylint
pip install pylint
pylint test.py
pep8
和flake8
pip install pep8
pep8 test.py