python-PEP8編碼規範

來源:互聯網
上載者:User

標籤:優先順序   err   條件   div   表名   元組   tar   通過   大寫   

PEP8編碼規範

這篇部落格是pep8的翻譯版
https://my.oschina.net/u/1433482/blog/464444

主要分為7部分
  • 因為在開發過程中讀一定是讀代碼多於寫代碼,所以保持代碼的一致性很重要
1. 代碼布局
  • 縮排:四個空格

  • 方法中多參數的懸掛或者垂直縮排:在IDE中一行到末尾時選擇換行???,並在下一行多空格兩個,避免與下一級的語句衝突

  • if中多條件串連:跟上面多參基本一致

  • 空格 or tab的選擇:用空格,在IDE中自動使用空格作為換行,如果自己在vim中編輯時,要用空格,保持一致

  • 最大行寬:所有行的最大行寬為79個字元,如果是文本(如注釋)最大為72字元

  • 空行:1.正常使用,作為分割邏輯快,不要使用過多的空行;2.在頂層函數與定義間用兩行空行

  • 檔案編碼的注意事項:py2中,預設是ascii編碼,而py3中是utf8編碼,用的是py2,所以盡量避免出現中文,保持ascii麼,還是規定編碼為utf8???

  • 標準庫或者普通庫的匯入:1.匯入一個庫在單獨行;2.匯入始終在檔案的頂部,在模組注釋和文檔字串之後,在模組全域變數和常量之前;3.匯入順序:標準庫,第三方庫,本地庫。匯入之間要有空行;4. 盡量使用絕對路徑匯入???

2. 字串引用
  • python中雙引號與單引號字串是相同的,而且盡量避免在字串中寫反斜線‘‘
3. 運算式和語句中的空格
  • 不能使用空格的情況:1.括弧內;2.逗號,冒號,分號前;3.索引切片操作符冒號前後???;4.函數名與括弧之間;5.列表名與中括弧之間;6.優先順序較高的運算子左右,比如*;7.方法中預設參數賦值操作符左右;8.

  • 要使用空格的情況:1.二元操作符左右;

  • 冒號一般前面沒有,後面有

  • 避免使用‘;‘作為串連兩個語句,盡量在一行不寫兩條語句

4. 注釋
  • 在更新代碼時,優先更新注釋,不對應的注釋比沒注釋還要糟糕

  • 註解區塊用#寫,每一行間用一個#隔開

  • 註解區塊內的段落用僅包含單個 ‘#‘ 的行分割

  • 文檔字串,用於公用模組、函數、類和方法中,必須寫上

  • ‘#‘後面跟著一個空格

5. 版本標籤
  • 如果你必須在源檔案中包含git、Subversion、CVS或RCS crud資訊,放置在模組的文檔字串之後任何其他代碼之前,上下各用一個空行
__version__ = "$Revision$"# $Source$
6. 命名規範
  • 前面有單底線:1.弱內部標誌:from M import不會匯入的對象

  • 後面有單底線:1.避免與關鍵字衝突

  • 前面有雙底線:1.對類這樣命名的時候,會觸發名字重整

  • 避免使用的名字:1.‘i‘,小寫i;2.‘I‘,大寫i;3.‘O‘,大寫o;

  • 模組名、包名:模組名全部小寫,用底線串連;包名也是小寫,但是不用底線

  • 類名:CapWord命名,也就是pascal風格,首字母大寫

  • 異常名:在類名後添加Error

  • 全域變數名:變數盡量只用於模組內部,約定類似函數。對設計為通過 "from M import " 來使用的模組,應採用 all 機制來防止匯入全域變數;或者為全域變數加一個前置底線。???

  • 函數名:小寫,必要時添加底線

  • 函數和方法參數:執行個體方法第一個參數是 ‘self‘。類方法第一個參數是 ‘cls‘。

  • 常量命名:大寫字母加底線

  • 繼承命名:公開屬性應該沒有前置底線。

如果公開屬性名稱和保留關鍵字衝突,可以添加後置底線

簡單的公開資料屬性,最好只公開屬性名稱,沒有複雜的訪問/修改方法,python的Property提供了很好的封裝方法。 d.如果不希望子類使用的屬性,考慮用兩個前置底線(沒有後置底線)命名。

7. 編程中的建議
  • +盡量寫為.join()

  • none值比較盡量用is,is not 而不是用==

  • 異常類繼承自Exception,而不是BaseException。

  • Python2中用" raise ValueError(‘message‘)"代替"raise ValueError, ‘message‘"

  • 捕獲異常時盡量指明具體異常,而不是空"except:"子句

  • Python 2.6以後建議用as顯示綁定異常名

try:    process_data()except Exception as exc:    raise DataProcessingFailedError(str(exc))
  • 函數或者方法在沒有返回時要明確返回None。

  • 使用字串方法而不是string模組。

  • 使用使用 .startswith()和.endswith()代替字串切片來檢查首碼和尾碼

# Yesif foo.startswith(‘bar‘):# Noif foo[:3] == ‘bar‘:
  • 使用isinstance()代替物件類型的比較:
# Yesif isinstance(obj, int):# Yesif isinstance(obj, basestring):# 字串類型# Noif type(obj) is type(1):
  • 對序列(字串、列表 、元組), 空序列為false:
# Yesif not seq:   passif seq:   pass# Noif len(seq):   passif not len(seq):   pass
  • 字串後面不要有大量拖尾空格。

  • 不要用 == 進行布爾比較

# Yesif greeting::   pass# Noif greeting == True   passif greeting is True: # Worse   pass

python-PEP8編碼規範

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.