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