Django 編碼規范

編碼規范

縮進

  • 統一使用4個空格進行縮進

行寬

每行代碼盡量不超過80個字符(在特殊情況下可以略微超過80,但最長不得超過120)

理由:

  • 這在查看side-by-side的diff時很有幫助
  • 方便在控制臺下查看代碼
  • 太長可能是設計有缺陷

引號

簡單說,自然語言使用雙引號,機器標示使用單引號,因此代碼里多數應該使用單引號

  • 自然語言 使用雙引號 "..."

    例如錯誤信息;很多情況還是unicode,使用u"你好世界"

  • 機器標識 使用單引號 '...' 例如dict里的key

  • 正則表達式 使用原生的雙引號 r"..."

  • 文檔字符串(docstring) 使用三個雙引號 """......"""

空行

  • 模塊級函數和類定義之間空兩行;
  • 類成員函數之間空一行;
class A:

    def __init__(self):
        pass

    def hello(self):
        pass


    def main():
        pass
  • 可以使用多個空行分隔多組相關的函數
  • 函數中可以使用空行分隔出邏輯相關的代碼

編碼

  • 文件使用UTF-8編碼
  • 文件頭部加入#--conding:utf-8--標識 (Python 3 以上版本不需要)

import語句

  • import語句應該分行書寫
#正確的寫法
import os
import sys

#不推薦的寫法
import sys,os

#正確的寫法
from subprocess import Popen, PIPE
  • import語句應該使用 absolute import
#正確的寫法
from foo.bar import Bar

#不推薦的寫法
from ..bar import Bar
  • import語句應該放在文件頭部,置于模塊說明及docstring之后,于全局變量之前;
  • import語句應該按照順序排列,每組之間用一個空行分隔
import os
import sys

import msgpack
import zmq

import foo
  • 導入其他模塊的類定義時,可以使用相對導入
from myclass import MyClass
  • 如果發生命名沖突,則可使用命名空間
import bar
import foo.bar

bar.Bar()
foo.bar.Bar()

空格

  • 在二元運算符兩邊各空一格 [=,-,+=,==,>,in,is not, and]:

      # 正確的寫法
      i = i + 1
      submitted += 1
      x = x * 2 - 1
      hypot2 = x * x + y * y
      c = (a + b) * (a - b)
    
      # 不推薦的寫法
      i=i+1
      submitted +=1
      x = x*2 - 1
      hypot2 = x*x + y*y
      c = (a+b) * (a-b)
    
  • 函數的參數列表中,,之后要有空格

      # 正確的寫法
      def complex(real, imag):
          pass
    
      # 不推薦的寫法
      def complex(real,imag):
          pass
    
  • 函數的參數列表中,默認值等號兩邊不要添加空格

      # 正確的寫法
      def complex(real, imag=0.0):
          pass
    
      # 不推薦的寫法
      def complex(real, imag = 0.0):
          pass
    
  • 左括號之后,右括號之前不要加多余的空格

      # 正確的寫法
      spam(ham[1], {eggs: 2})
    
      # 不推薦的寫法
      spam( ham[1], { eggs : 2 } )
    
  • 字典對象的左括號之前不要多余的空格

      # 正確的寫法
      dict['key'] = list[index]
    
      # 不推薦的寫法
      dict ['key'] = list [index]
    
  • 不要為對齊賦值語句而使用的額外空格

      # 正確的寫法
      x = 1
      y = 2
      long_variable = 3
    
      # 不推薦的寫法
      x             = 1
      y             = 2
      long_variable = 3
    

換行

Python支持括號內的換行。這時有兩種情況。

  1. 第二行縮進到括號的起始處

     foo = long_function_name(var_one, var_two,
                      var_three, var_four)
    
  2. 第二行縮進4個空格,適用于起始括號就換行的情形

     def long_function_name(
             var_one, var_two, var_three,
             var_four):
         print(var_one)
    
  • 使用反斜杠\換行,二元運算符 + . 等應出現在行末;長字符串也可以用此法換行

      session.query(MyTable).\
              filter_by(id=1).\
              one()
    
      print 'Hello, '\
          '%s %s!' %\
          ('Harry', 'Potter')
    
  • 禁止復合語句,即一行中包含多個語句:

      # 正確的寫法
      do_first()
      do_second()
      do_third()
    
      # 不推薦的寫法
      do_first();do_second();do_third();
    
  • if/for/while一定要換行:

      # 正確的寫法
      if foo == 'blah':
          do_blah_thing()
    
      # 不推薦的寫法
      if foo == 'blah': do_blash_thing()
    

注釋

塊注釋

  • “#”號后空一格,段落件用空行分開(同樣需要“#”號)

      # 塊注釋
      # 塊注釋
      #
      # 塊注釋
      # 塊注釋
    

行注釋

  • 至少使用兩個空格和語句分開,注意不要使用無意義的注釋

      # 正確的寫法
      x = x + 1  # 邊框加粗一個像素
    
      # 不推薦的寫法(無意義的注釋)
      x = x + 1 # x加1
    

docstring

  • docstring的規范在 PEP 257 中有詳細描述,其中最其本的兩點:
  1. 所有的公共模塊、函數、類、方法,都應該寫docstring。私有方法不一定需要,但應該在def后提供一個塊注釋來說明。

  2. docstring的結束"""應該獨占一行,除非此docstring只有一行。

     """Return a foobar
     Optional plotz says to frobnicate the bizbaz first.
     """
    
     """Oneline docstring"""
    

命名規范

  • 應避免使用小寫字母l(L),大寫字母O(o)I(i)單獨作為一個變量的名稱,以區分數字1和0;
  • 包和模塊使用全小寫命名,盡量不要使用下劃線
  • 類名使用CamelCase命名風格,內部類可用一個下劃線開頭
  • 函數使用下劃線分隔的小寫命名
  • 當參數名稱和Python保留字沖突,可在最后添加一個下劃線,而不是使用縮寫或自造的詞
  • 常量使用以下劃線分隔的大寫命名
MAX_OVERFLOW = 100
        
Class FooBar:

    def foo_bar(self, print_):
        print(print_)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,486評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,462評論 2 378

推薦閱讀更多精彩內容

  • 原文: https://github.com/ecomfe/spec/blob/master/javascript...
    zock閱讀 3,391評論 2 36
  • 目錄前言源文件基礎源文件結構格式命名約定編程實踐Javadoc后記 前言這份文檔是Google Java編程風格規...
    燕京博士閱讀 436評論 1 1
  • JavaScript編碼規范 1 前言 JavaScript 在百度一直有著廣泛的應用,特別是在瀏覽器端的行為管理...
    Top_Chenxi閱讀 518評論 1 2
  • 第一次不知該寫些什么文字 最近幾年似乎每天都在成長 學會 接受 忍受 聊天 沉默 還有人生 十月 你好 請對我好一些
    南方有羊閱讀 163評論 0 1
  • 很久之前 家里養了只野貓 顏值超高 可就是脾氣不好 當然 我們也可以說 她除了脾氣不好 什么都好???♀? 我人生第...
    嶼婳閱讀 342評論 2 1