python 中變量的命名方法

從網上找到django中python的命名規範python

Python  規範django

代碼的佈局編輯器

 編碼函數

   全部的Python腳本文件都應在文件頭標上「# -*- coding:utf-8 -*-」。佈局

 縮進測試

4個空格一個縮進層次  字體

空行ui

適當的空行有利於增長代碼的可讀性,加空行能夠參考以下幾個準則:this

(1) 在類、函數的定義間加空行;編碼

(2) 在import不一樣種類的模塊間加工行;

(3) 在函數中的邏輯段落間加空行,即把相關的代碼緊湊寫在一塊兒,做爲一個邏輯段落,段落間以空行分隔

換行

       語句比較長,一行寫不下的狀況下使用

  1. 在括號(包括圓括號、方括號和花括號)內換行,如:
    class Edit(CBase):
        def __init__(self, parent, width,
                    font = FONT, color = BLACK, pos = POS, style = 0):
    或:
    very_very_very_long_variable_name = Edit(parent, \
                                                             width, \
                                                              font, \
                                                              color, \
                                                              pos)
    若是行長到連第一個括號內的參數都放不下,則每一個元素都單獨佔一行:
    very_very_very_long_variable_name = ui.widgets.Edit( \
                                                       panrent, \
                                                       width, \
                                                       font, \
                                                       color, \
                                                       pos)
  2. 在長行加入續行符強行斷行,斷行的位置應在操做符前,且換行後多一個縮進,以使維護人員看代碼的時候看到代碼行首便可斷定這裏存在換行,如:
    if color == WHITE or color == BLACK \
    or color == BLUE:       # 注意or操做符在新行的行首而不是舊行的行尾
        do_something(color);

命名約定

有許多不一樣的命名風格。如下的有助於辨認正在使用的命名風格,獨立於它們的做用。    如下的命名風格是衆所周知的:

    b (單個小寫字母)

    B (單個大寫字母)

    Lowercase(小寫)

    lower_case_with_underscores(有下劃線的小寫)

    UPPERCASE(大寫)

UPPER_CASE_WITH_UNDERSCORES(有下劃線的大寫)

應避免的名字。永遠不要用字符‘l’(小寫字母el(就是讀音,下同)),‘O’(大寫字母oh),或‘I’(大寫字母eye)做爲單字符的變量名。在某些字體中這些字符不能與數字1和0分辨。試着在使用‘l’時用‘L’代替。

 

 常量
常量名全部字母大寫,由下劃線鏈接各個單詞,如:
WHITE = 0XFFFFFF
THIS_IS_A_CONSTANT = 1

 

變量
變量名所有小寫,由下劃線鏈接各個單詞,如:
color = WHITE
this_is_a_variable = 1
不管是類成員變量仍是全局變量,均不使用 m 或 g 前綴。私有類成員使用單一下劃線前綴標識,多定義公開成員,少定義私有成員。
變量名不該帶有類型信息,由於 Python 是動態類型語言。如 iValue、names_list、dict_obj 等都是很差的命名。

全局變量名

               這些約定和在函數中的同樣。模塊是被設計爲經過「from M import *」來使用的,必須用一個下劃線做全局變量(及內部函數和類)的前綴防止其被導出(exporting)。

 

函數
函數名的命名規則與變量名相同。


類名單詞首字母大寫,不使用下劃線鏈接單詞,也不加入 C、T 等前綴。如:
class ThisIsAClass(object):
    passs

模塊
模塊名所有小寫,對於包內使用的模塊,能夠加一個下劃線前綴,如:
module.py
_internal_module.py


包的命名規範與模塊相同。

縮寫
命名應當儘可能使用全拼寫的單詞,縮寫的狀況有以下兩種:

1      命名中含有長單詞,對某個單詞進行縮寫。這時應使用約定成俗的縮寫方式,如去除元音、包含輔音的首字符等方式,例如:
function 縮寫爲 fn
text 縮寫爲 txt
object 縮寫爲 obj
count 縮寫爲 cnt
number 縮寫爲 num,等。
特定命名方式,主要是指 __xxx__ 形式的系統保留字命名法。項目中也可使用這種命名,它的意義在於這種形式的變量是隻讀的,這種形式的類成員函數儘可能不要重載。

異常名

若是模塊對全部狀況定義了單個異常,它一般被叫作「error」或「Error」。彷佛內建(擴展)的模塊使用「error」(例如:os.error),而Python模塊一般用「Error」 (例如:xdrlib.Error)。趨勢彷佛是傾向使用CapWords異常名

語句
 import
     import 語句有如下幾個原則須要遵照:

(1)import 的次序,先 import Python 內置模塊,再 import 第三方模塊,最後 import 本身開發的項目中的其它模塊;這幾種模塊中用空行分隔開來。

(2) 一條 import 語句 import 一個模塊。

(3)當從模塊中 import 多個對象且超過一行時,使用以下斷行法
from module import (obj1, obj2, obj3, obj4,
                                             obj5, obj6)

(4)不要使用 from module import *,除非是 import 常量定義模塊或其它你確保不會出現命名空間衝突的模塊。

2      分枝和循環
       對於分枝和循環,有以下幾點須要注意的:

不要寫成一行,如:
If !flg: pass 和 for i in xrange(10): print i都不是好代碼,應寫成
if !flg:
    pass
for i in xrange(10):
    print i

 

其它建議

    始終在這些二元運算符兩邊放置一個空格:賦值(=), 比較(==,<,>,!=,<>,<=,      >=,in,not in,is,is not),布爾運算 (and,or,not)。

    按你的見解在算術運算符周圍插入空格。 始終保持二元運算符兩邊空格的一致。

    一些例子:

#!Python

          i = i+1

          submitted = submitted + 1

          x = x*2 - 1

          hypot2 = x*x + y*y

          c = (a+b) * (a-b)

          c = (a + b) * (a - b)

    不要在用於指定關鍵字參數或默認參數值的'='號周圍使用空格,例如:

#!Python

          def complex(real, imag=0。0):

              return magic(r=real, i=imag)

   

 

註釋

以#號開頭

同代碼不一致的註釋比沒註釋更差。當代碼修改時,始終優先更新註釋!註釋應該是完整的句子,若是註釋是一個短語或句子,首字母應該大寫,除非他是一個以小寫字母開頭的標識符(永遠不要修改標識符的大小寫)。

    若是註釋很短,最好省略末尾的句號。 

註釋塊

註釋塊一般應用於跟隨着一些(或者所有)代碼並和這些代碼有着相同的縮進層次。註釋塊中每行以‘#’和一個空格開始(除非他是註釋內的縮進文本)。註釋塊內的段落以僅含單個‘#’的行分割。註釋塊上下方最好有一空行包圍(或上方兩行下方一行,對一個新函數定義段的註釋)。

# url(r'^mysite/', include('mysite.foo.urls')),

 # Uncomment the admin/doc line below to enable admin documentation:

# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

 

行內註釋

    一個行內註釋是和語句在同一行的註釋,行內註釋應該謹慎適用,行內註釋應該至少用兩個空格和語句分開,它們應該以'#'和單個空格開始。

        x = x+1                 # Increment x

    若是語意是很明瞭的,那麼行內註釋是沒必要要的,事實上是應該被移除的。不要這樣寫:

        x = x+1                 # Increment x

        x = x+1                 # Compensate for border

    可是有時,這樣是有益的:

        x = x+1                 # Compensate for border

繼承的設計

始終要肯定一個類中的方法和實例變量是否要被公開。一般,永遠不要將數據變量公開,除非你實現的本質上只是記錄,人們幾乎老是更喜歡代之給出一個函數做爲類的界面(Python 2.2 的一些開發者在這點上作得很是漂亮)。

一樣,肯定你的屬性是否應爲私有的。私有和非私有的區別在於模板將永遠不會對原有的類(導出類)有效,然後者能夠。你應該在大腦中就用繼承設計好了你的類,私有屬性必須有兩個前導下劃線,無後置下劃線,非公有屬性必須有一個前導下劃線,無後置下劃線,公共屬性沒有前導和後置下劃線,除非它們與保留字衝突,在此狀況下,單個後置下劃線比前置或混亂的拼寫要好,例如:class_優於klass。

最後一點有些爭議:若是相比class_你更喜歡klass,那麼這只是一致性問題。

 

設計建議

單個元素(singletons)的比較,如None 應該永遠用:‘is’或‘is not’來作。當你本意是「if x is not None」時,對寫成「if x」要當心。例如當你測試一個默認爲None的變量或參數是否被設置爲其它值時,這個值也許在布爾上下文(Boolean context)中是false!

基於類的異常老是好過基於字符串的異常。模塊和包應該定義它們本身的域內特定的基異常類,基類應該是內建的Exception類的子類。還始終包含一個類的文檔字符串。例如:

#!Python

        class MessageError(Exception):

            """Base class for errors in the email package。"""

使用字符串方法(methods)代替字符串模塊,除非必須向後兼容Python 2.0之前的版本。字符串方法老是很是快,並且和unicode字符串共用一樣的API(應用程序接口)在檢查前綴或後綴時避免對字符串進行切片。用startswith()和endswith()代替,由於它們是明確的而且錯誤更少。例如:

        No: if foo[:3] == 'bar':

        Yes: if foo。startswith('bar'):

例外是若是你的代碼必須工做在Python 1.5.2 (可是咱們但願它不會發生!),對象類型的比較應該始終用isinstance()代替直接比較類型,例如:

        No: if type(obj) is type(1):

        Yes: if isinstance(obj, int):

檢查一個對象是不是字符串時,緊記它也多是unicode字符串!在Python 2.3,str和unicode有公共的基類,basestring,因此你能夠這樣作:

        if isinstance(obj, basestring):

在Python 2.2類型模塊爲此定義了StringTypes類型,例如:

#!Python

        from types import StringTypes

        if isinstance(obj, StringTypes):

在Python 2.0和2.1,你應該這樣作:

#!Python

        from types import StringType, UnicodeType

        if isinstance(obj, StringType) or \

           isinstance(obj, UnicodeType) :

對序列,(字符串,列表,元組),使用空列表是false這個事實,所以「if not seq」或「if seq」比「if len(seq)」或「if not len(seq)」好。書寫字符串文字時不要依賴於有意義的後置空格。這種後置空格在視覺上是不可辨別的,而且有些編輯器(特別是近來,reindent.py)會將它們修整掉。不要用==來比較布爾型的值以肯定是True或False(布爾型是Pythn 2.3中新增的)

        No: if greeting == True:

        Yes: if greeting:

 

        No: if greeting == True:

        Yes: if greeting:

Django  使用規範

(1)      模版規則:

在模版中,大括號裏的關鍵詞先後應該插入空格

如:{{ foo }}

而不是:{{foo}}

(2)      視圖的規則:

在視圖中,第一個參數應該寫成request

如:def my_view (request , foo):

           #…………………………

而不是:

     def my_view (foo ,request):

            #…………………………

Model 規範

     (1)  裏邊的字段名應該小寫,可使用下劃線:

如:

 class Person(models.Model):

 first_name = models.CharField(max_length=20)

 last_name = models.CharField(max_length=40)

而不是:

  class Person(models.Model):

 Frst_name = models.CharField(max_length=20)

 LAST = models.CharField(max_length=40)

 

(2)兩個class之間用空白行隔開

 

(3)model 內的classes 和 methods 應該採起如下的順序(這些方法並非全部的class都要定義):

全部的數據項的field

自定義的manager 屬性

class Meta:
def __unicode__() :

def save()

def get_absolute_url()

其餘自定義的methods

若是給一個model field定義了可選擇項,那麼請將選擇項定義爲元組(內含不少元組--選擇項),將選擇項元組名稱定義爲所有大寫,定義放在model的頂部 或者就在model 的上面。

例如,性別選擇項GENDER_CHOICES這個名字爲所有大寫:
GENDER_CHOICES = (
    ('M', 'Male'),
    ('F', 'Female'),
)

django.conf.settings規範:

     (1)  settings.py中要使用相對路徑:

相關文章
相關標籤/搜索