1. 程式人生 > >Python風格規範

Python風格規範

acc pen 分號 res -i str map lai parent

Python風格規範

整理自Google開源項目指南

分號

  1. 不要在行尾加上分號,也不要用分號將兩條命令分開;

行長度

  1. 每行長度不超過80個字符;
  2. 不要使用反斜杠連接行,可以使用圓括號來連接;

    # True
         x = (‘This will build a very long long ‘
         ‘long long long long long long string‘)
         
  3. URL可以單獨放一行,不需要分割;

括號

  1. 除非是實現行連接,否則不要在返回語句或者條件語句中使用括號;

    # wrong
         def foo():
         if (True):
         print(‘True‘)
         return (True)
         

縮進

  1. 用4個空格來縮進代碼,不要使用Tab。

空行

  1. 頂級定義(函數定義或者類定義)之間空兩行,方法定義之間空一行;

空格

  1. 括號兩邊不要有空格;
  2. 不要在逗號,分號,冒號前面加空格,而是在後面加;
  3. 字典中冒號前面不用加空格,而是在後面加;
  4. 二元操作符兩邊都要加上一個空格,包括=、<、>、in、not in等等;
  5. 不要用空格垂直對齊多行間的標記;

    # True
         foo = 1000 # comment
         long_name = 2 # comment that should not be aligned
         

註釋

  1. 一個函數除非是非常短小或者簡單明了,否則都應該有註釋;
  2. 函數註釋需要包括說明、參數、返回、異常;

    def fetch_bigtable_rows(big_table, keys, other_silly_variable=None):
         """Fetches rows from a Bigtable.
    Retrieves rows pertaining to the given keys from the Table instance represented by big_table. Silly things may happen if other_silly_variable is not None. Args: big_table: An open Bigtable Table instance. keys: A sequence of strings representing the key of each table row to fetch. other_silly_variable: Another optional variable, that has a much longer name than the other args, and which does nothing. Returns: A dict mapping keys to the corresponding table row data fetched. Each row is represented as a tuple of strings. For example: {‘Serak‘: (‘Rigel VII‘, ‘Preparer‘), ‘Zim‘: (‘Irk‘, ‘Invader‘), ‘Lrrr‘: (‘Omicron Persei 8‘, ‘Emperor‘)} If a key from the keys argument is missing from the dictionary, then that row was not found in the table. Raises: IOError: An error occurred accessing the bigtable.Table object. """ pass
  3. 類的註釋包括說明,如果屬性是公共屬性,那麽還需要包括屬性;

    class SampleClass(object):
         """Summary of class here.
         Longer class information....
         Longer class information....
         Attributes:
          likes_spam: A boolean indicating if we like SPAM or not.
          eggs: An integer count of the eggs we have laid.
         """
         def __init__(self, likes_spam=False):
         """Inits SampleClass with blah."""
         self.likes_spam = likes_spam
         self.eggs = 0
         def public_method(self):
         """Performs operation blah."""
         
  4. 塊註釋和行註釋應該寫代碼做了什麽(如果較復雜),而不是描述代碼;

  5. 使用"""字符來標註;

  1. 如果一個類不繼承自其它類,就顯式的從object繼承,不要什麽都不寫;

字符串

  1. 避免在循環中使用+來連接字符串,推薦使用數組的join;
  2. 在同一個文件中, 保持使用字符串引號的一致性;

TODO註釋

  1. 為臨時代碼使用TODO註釋, 它是一種短期解決方案;
  2. TODO註釋應該在所有開頭處包含”TODO”字符串,緊跟著是用括號括起來的你的名字,email地址或其它標識符,然後是一個可選的冒號,接著必須有一行註釋,解釋要做什麽。

    # True
         # TODO([email protected]): Use a "*" here for string repetition.
         # TODO(Zeke) Change this to use relations.
         

導入格式

  1. 每個導入應該獨占一行;

    # False
         import os, sys
         # True
         import os
         import sys
         
  2. 導入應該按照最通用到最不通用的順序進行排序,首先是1. 標準庫;2.第三方庫;3. 模塊庫;

語句

  1. 除了exp if else,語句最好單獨一行;

命名

  1. 使用單下劃線開頭表示模塊變量或者函數是protected的;
  2. 使用雙下劃線開頭表示實例變量或者方法是類內私有的;
  3. 類名應該使用大寫字母開頭的單詞;
  4. 模塊名和函數名和參數名應該使用小寫加下劃線的方式;

Main

  1. 為了避免倒入模塊時被執行,需要加上mian的判斷;

    def main():
         ...
         if __name__ == ‘__main__‘:
         main()

Python風格規範