python的PEP8規範
換行
- 主動換行
foo_bar(self, width, height, color='black', design=None, x='foo',
emphasis=None, highlight=0)
- 括號隱式連線
if (width == 0 and height == 0 and
color == 'red' and emphasis == 'strong'):
x = ('這是一個非常長非常長非常長非常長 '
'非常長非常長非常長非常長非常長非常長的字串')
- 在沒有else的情況下,if語句可以獨佔一行
if 1: print(1)
括號
- 不要在返回值或條件語句中使用括號,除非需要數學計算或行連線
正確:
class A():
return 1+1
糟糕:
class A():
return (1+1)
縮排
- 函式引數與起始變數對齊
foo = long_function_name(var_one, var_two,
var_three, var_four)
- 四個空格縮排風格
foo = long_function_name(
var_one, var_two, var_three,
var_four)
foo = {
long_dictionary_key:
long_dictionary_value,
...
}
空行
- 頂級定義之間空兩行
class A():
pass
class B():
pass
- 方法定義之間空一行
class A():
def a():
pass
def b():
pass
空格
-
括號裡不要有空格
-
在逗號冒號分號後面新增空格
if 0: return 1
註釋
- 註釋中的url不管多長應寫在一行內,不要換行
url = 'https://www.baidu.com/s?ie=utf-8&tn=88093251_75_hao_pg&wd=python%20__next__/hgasuidgyugvdasbdiyagsyd'
- 不要用空格垂直對齊註釋
錯誤示範:
a=1 # 變數a=1
b = a+1+1 # b = a+1+1
- 文件註釋
"""方法簡要說明
方法詳細說明
Args:
引數: 引數說明.
Returns:
返回值說明. For
example:
返回值示例
Raises:
IOError: 異常說明
"""
- 程式碼塊註釋
程式碼塊中,對於複雜的操作, 應該在其操作開始前寫上若干行註釋. 對於不是一目瞭然的程式碼, 應在其行尾新增註釋.絕不要描述程式碼. 假設閱讀程式碼的人比你更懂Python, 他只是不知道你的程式碼要做什麼. - TODO
為臨時程式碼使用TODO註釋, 它是一種短期解決方案. 不算完美, 但夠好了.TODO註釋應該在所有開頭處包含"TODO"字串, 緊跟著是用括號括起來的你的名字, email地址或其它識別符號. 然後是一個可選的冒號. 接著必須有一行註釋, 解釋要做什麼. 主要目的是為了有一個統一的TODO格式
# TODO(Aaron) Change this to use relations.
繼承
- 如果一個類不繼承自其它類, 就顯式的從object繼承. 巢狀類也一樣.
class OuterClass(object):
class InnerClass(object):
pass
迴圈
- 避免在迴圈中用+和+=操作符來累加字串. 由於字串是不可變的, 這樣做會建立不必要的臨時物件, 並且導致二次方而不是線性的執行時間. 作為替代方案, 你可以將每個子串加入列表, 然後在迴圈結束後用 .join 連線列表.
字串
- 為多行字串使用三重雙引號"""而非三重單引號’’’. 當且僅當專案中使用單引號’來引用字串時, 才可能會使用三重’’’
關閉檔案
- 關閉類檔案物件的方法,對於不支援使用"with"語句的類似檔案的物件,使用contextlib.closing():
import contextlib
with contextlib.closing(urllib.urlopen("http://www.python.org/")) as front_page:
for line in front_page:
print line
匯入
- 每個匯入獨佔一行
匯入順序:
- 標準庫匯入
- 第三方庫匯入
- 應用程式指定匯入
# 不推薦:
import sys, os
# 但是可以這樣:
from subprocess import Popen, PIPE
下劃線
- 用單下劃線(_)開頭表示模組變數或函式是protected的(使用import * from時不會包含).
- 用雙下劃線(__)開頭的例項變數或方法表示類內私有.
類
- 將相關的類和頂級函式放在同一個模組裡. 不像Java, 沒必要限制一個類一個模組.
main
- 即使是一個打算被用作指令碼的檔案, 也應該是可匯入的. 並且簡單的匯入不應該導致這個指令碼的主功能(main functionality)被執行, 這是一種副作用. 主功能應該放在一個main()函式中.
判斷
- 空序列的判斷
# 正確:
if not seq:
if seq:
# 糟糕:
if len(seq):
if not len(seq):
通用
- 不要為了遵守PEP約定而破壞相容性!
- 所有行限制的最大字元數為79。
相關文章
- Python PEP8程式碼書寫規範Python
- PEP8 python規範神器和jupyter notebook主題更改Python
- 【翻譯】Python PEP8編碼規範(中文版)Python
- Python命名規範Python
- python編碼規範Python
- python程式設計規範Python程式設計
- PEP8風格和python版本區別Python
- MySQL資料庫規範 (設計規範+開發規範+操作規範)MySql資料庫
- python大型專案開發規範_學習Python模組匯入機制與大型專案的規範Python
- python 程式設計規範有哪些?Python程式設計
- Python程式碼規範性檢測Python
- Python基礎:編碼規範(4)Python
- 規範與偏離規範
- 前端規範之HTML 規範前端HTML
- 前端規範之javascript規範前端JavaScript
- 前端規範之CSS規範前端CSS
- 前端規範之nodeJs 規範前端NodeJS
- Python程式設計規範+最佳實踐Python程式設計
- 前端規範之CSS規範(Stylelint)前端CSS
- PHP 規範 - Symfony 程式碼規範PHP
- AMD 規範與CMD 規範概要
- python編碼規範以及推導式的編寫Python
- 規範
- 前端規範之Git提交規範(Commitizen)前端GitMIT
- 前端規範與思考(二)———css規範前端CSS
- 前端規範之vue 專案規範前端Vue
- 『前端規範化』CSS命名規範化前端CSS
- 前端規範之媒體檔案規範前端
- 從規範看ECMAScript(一):規範基礎
- Commit規範MIT
- Servlet 規範Servlet
- 提交規範
- Commonjs規範JS
- MySQL 規範MySql
- Mysql-基本的規則與規範MySql
- python程式設計規範系列–建議01~07Python程式設計
- 個人總結——全面的『Python編碼規範』Python
- stylelint 規範你的 cssCSS