<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Sealyu

    --- 博客已遷移至: http://www.sealyu.com/blog

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks
    本文最初發(fā)表于賴勇浩(戀花蝶)的博客:http://blog.csdn.net/lanphaday,如蒙轉載,必須保留全文完整,未經本人同意,不得用于商業(yè)目的。

    簡明 Python 編程規(guī)范51Testing軟件測試網!L2kA c(M}&k("

    編 碼51Testing軟件測試網3EFD`G Xm

        所有的 Python 腳本文件都應在文件頭標上 # -*- coding:utf-8 -*- 。設置編輯器,默認保存為 utf-8 格式。51Testing軟件測試網3}f n9u5@h'uC9?~

    注 釋51Testing軟件測試網 K4@?IC J {)b"k"

        業(yè)界普遍認同 Python 的注釋分為兩種的概念,一種是由 # 開頭的“真正的”注釋,另一種是 docstrings。前者表明為何選擇當前實現(xiàn)以及這種實現(xiàn)的原理和難點,后者表明如何使用這個包、模塊、類、函數(shù)(方法),甚至包括使用示例和單元測試
        堅持適當注釋原則。對不存在技術難點的代碼堅持不注釋,對存在技術難點的代碼必須注釋。但與注釋不同,推薦對每一個包、模塊、類、函數(shù)(方法)寫 docstrings,除非代碼一目了然,非常簡單。51Testing軟件測試網 'Y:w2S%ao(_)Lk

    縮 進51Testing軟件測試網J?g} G-`5U Gs'Hq

        Python 依賴縮進來確定代碼塊的層次,行首空白符主要有兩種:tab 和空格,但嚴禁兩者混用。如果使用 tab 縮進,設定 tab 為 4 個空格。
        公司內部推薦使用 4 個空格的 tab 進行縮進。51Testing軟件測試網-j a `+z ~r.oQ Zs
    空格

        空格在 Python 代碼中是有意義的,因為 Python 的語法依賴于縮進,在行首的空格稱為前導空格。在這一節(jié)不討論前導空格相關的內容,只討論非前導空格。非前導空格在 Python 代碼中沒有意義,但適當?shù)丶尤敕乔皩Э崭窨梢栽鲞M代碼的可讀性。
    MmO x nYM01) 在二元算術、邏輯運算符前后加空格:如 a = b + c;
    2) 在一元前綴運算符后不加空格,如 if !flg: pass;
    3) “:” 用在行尾時前后皆不加空格,如分枝、循環(huán)、函數(shù)和類定義語言;用在非行尾時兩端加空格,如 dict 對象的定義 d = {‘key’ : ’value’}。
    4) 括 號(含圓括號、方括號和花括號)前后不加空格,如 do_something(arg1, arg2),而不是 do_something( arg1, arg2 );
    5) 逗號后面 加一個空格,前面不加空格;s

    E'M/z Yv"v lh0空行

        適當?shù)目招杏欣谠黾哟a的可讀性,加空行可以參考如下幾個準則:
    1) 在 類、函數(shù)的定義間加空行;
    2) 在 import 不同種類的模塊間加工行;51Testing軟件測試網L7[2e N+S rm
    3) 在函數(shù)中的邏輯段落間加空行,即把相關的代碼緊湊寫在一起,作為一個邏輯段落,段落間以空行分隔;

    斷行
     
      盡管現(xiàn)在的寬屏顯示器已經可以單屏顯示超過 256 列字符,但本規(guī)范仍然堅持行的最大長度不得超過 78 個字符的標準。折疊長行的方法有以下幾種方法:
    f?k c&nJ4nR01) 為長變量名換一個短名,如:
        this.is.a.very.long.variable_name = this.is.another.long.variable_name
        應改為:
        variable_name1 = this.is.a.very.long.variable_name51Testing軟件測試網M a cb5"8`1X{
        variable_name2 = this.is.another.variable_name
    ,_JE9@ p0    variable_name1 = variable_name2s
    2) 在括號(包括圓括號、方括號和花括號)內換行,如:51Testing軟件測試網+y ?"Mqe:X$Ylr Q*S
        class Edit(CBase):
    U"2|u!? C?Y0        def __init__(self, parent, width, 51Testing軟件測試網m-dN,u b fa(I y
                                    font = FONT, color = BLACK, pos = POS, style = 0):
    QK/IpVh&HB!c:f r0    或:
    x"B}Qm hf!E0    very_very_very_long_variable_name = Edit(parent, "
                                                                                width, "
                                                                                font, "
                                                                                color, "
    2r8o,V O#}`.GS?S/B0                                                                            pos)
        如果行長到連第一個括號內的參數(shù)都放不下,則每個元素都單獨占一行:51Testing軟件 測試網,kTP"D/ux4af
        very_very_very_long_variable_name = ui.widgets.Edit( "51Testing軟件測試網g5lj"I. {6~z1t
                                                                                        panrent, "
                                                                                        width, "
                                                                                        font, "
                                                                                        color, "
                                                                                        pos)
    3) 在長行加入續(xù)行符強行斷 行,斷行的位置應在操作符前,且換行后多一個縮進,以使維護人員看代碼的時候看到代碼行首即可判定這里存在換行,如:
    8_ V,w)j-mn@-j0if color == WHITE or color == BLACK "
    or color == BLUE: # 注意 or 操作符在新行的行首而不是舊行的行尾
    do_something(color);

    命名
    51Testing 軟件測試網/"Xq5|E%Kn

        一致的命名可以給開發(fā)人員減少許多麻煩,而恰如其分的命名則可以大幅提高代碼的可讀性,降低維護成本。

    常量


     常 量名所有字母大寫,由下劃線連接各個單詞,如51Testing軟件測試網9Nh#f y+{'X^1W
    WHITE = 0XFFFFFF51Testing 軟件測試網EiS!| E"i
    THIS_IS_A_CONSTANT = 1

    變量
    51Testing 軟件測試網I Vk6w,|

        變量名全部小寫,由下劃線連接各個單詞,如
    color = WHITE51Testing軟件測試網*v-]1m,g"js [Xu'@
    this_is_a_variable = 1
    R$K so M~D.C0    不論是類成員變量還是全局變量,均不使用 m 或 g 前綴。私有類成員使用單一下劃線前綴標識,多定義公開成員,少定義私有成員。51Testing 軟件測試網tlF e.v;Ym!Wg?
        變量名不應帶有類型信息,因為 Python 是動態(tài)類型語言。如 iValue、names_list、dict_obj 等都是不好的命名。51Testing 軟件測試網N"z:p2};J&`

    函 數(shù)

    Cloqn0
        函數(shù)名的命名規(guī)則與變量名相同。
    U4lu b"0
    -s2w9yym;{ P0    類名單詞首字母大寫,不使用下劃線連接單詞,也不加入 C、T 等前綴。如:
    class ThisIsAClass(object):
        passs
    模塊51Testing軟件測試網GK!P }:D"x
        模塊名全部小寫,對于包內使用的模塊,可以加一個下劃線前綴,如
    module.py
    _internal_module.py

    51Testing軟件測試網5zK b.S })W#H M+_

        包的命名規(guī)范與模塊相同。

    縮寫


        命名應當盡量使用全拼寫的單詞,縮寫的情況有如下兩種:
    1) 常用的縮寫,如 XML、ID等,在命名時也應只大寫首字母,如
    class XmlParser(object):pass51Testing軟件測試網8xYp qM5?
    2) 命名中含有長單詞,對某個單詞進行縮寫。這時應使用約定成俗的縮寫方式,如去除元音、包含輔音的首字符等方式, 例如:
    2E@E+y BD}p,d0function 縮寫為 fn51Testing軟件 測試網e9F+^z{ q7T A
    text 縮寫為 txt51Testing 軟件測試網A'U~OwjE*i
    object 縮寫為 obj
    count 縮寫為 cnt
    number 縮寫為 num,等。
    特定命名方 式
        主要是指 __xxx__ 形式的系統(tǒng)保留字命名法。項目中也可以使用這種命名,它的意義在于這種形式的變量是只讀的,這種形式的類成員函數(shù)盡量不要重載。如
    class Base(object):
        def __init__(self, id, parent = None):
            self.__id__ = id
            self.__parent__ = parent51Testing軟件測試網 3v3M?km#]L]*L m2D
        def __message__(self, msgid):
            # …略
    其中 __id__、__parent__ 和 __message__ 都采用了系統(tǒng)保留字命名法。51Testing軟件測試網2V D_ nf?X"

    語 句
    51Testing軟件測試網&v`?Y z7za o

    import

        import 語句有以下幾個原則需要遵守:51Testing軟件測試網N}D~@E J0F:}v.i
    1) import 的次序,先 import Python 內置模塊,再 import 第三方模塊,最后 import 自己開發(fā)的項目中的其 它模塊;這幾種模塊中用空行分隔開來。51Testing 軟件測試網 r"l ~J3E%B6BVH
    2) 一條 import 語句 import 一個模塊。
    3) 當從模塊中 import 多個對象且超過一行時,使用如下斷行法(此語法 py2.5 以上版本才支持):51Testing 軟件測試網)^he$i+RMV'B
    from module import (obj1, obj2, obj3, obj4,
                                        obj5, obj6)
    4) 不 要使用 from module import *,除非是 import 常量定義模塊或其它你確保不會出現(xiàn)命名空間沖突的模塊。
    ";wf4a4D WaS$c@ ~0賦值
        對于賦值語言,主要是不要做無謂的對齊,如:
    Y0t&V6U(Qxx?vHQv1c0a   = 1     # 這是一個行注釋
    variable  = 2     # 另一個行注釋
    fn   = callback_function  # 還是行注釋51Testing軟件測試網+l q rq Z-n&_-`*[l P5[
    沒有必要做這種對齊,原因有兩點:一是這種對齊會打亂編程時的注意力,大腦要同時處理兩件 事(編程和對齊);二是以后閱讀和維護都很困難,因為人眼的橫向視野很窄,把三個字段看成一行很困難,而且維護時要增加一個更長的變量名也會破壞對齊。直 接這樣寫為佳:
    a = 1 # 這是一個行注釋
    variable = 2 # 另一個行注釋
    fn = callback_function # 還是行注釋
    6X!_I%J+L ?K0分枝和循環(huán)
        對于分枝和循環(huán),有如下幾點需要注意的:
    1) 不 要寫成一行,如:
    if !flg: pass 和 for i in xrange(10): print i都不是好代碼,應寫成
    if !flg:
        pass
    for i in xrange(10):
        print i
    注: 本文檔中出現(xiàn)寫成一行的例子是因為排版的原因,不得作為編碼中不斷行的依據(jù)。
    2) 條 件表達式的編寫應該足夠 pythonic,如以下形式的條件表達式是拙劣的:51Testing 軟件測試網,F!EH ~Wr]
    if len(alist) != 0: do_something()
    if alist != []: do_something()
    if s != “”: do_something()
    8z-Y[ F2F0if var != None: do_something()
    if var != False: do_something()
    上面的語句應該寫成:
    if seq: do_somethin() # 注意,這里命名也更改了
    if var: do_something()
    3) 用 得著的時候多使用循環(huán)語句的 else 分句,以簡化代碼。51Testing軟件測試網 q _?}6o4t-S2sZ

    已有代碼
    51Testing軟件測試網 O8|c px*N2evNK D

        對于項目中已有的代碼,可能因為歷史遺留原因不符合本規(guī)范,應當看作可以容忍的特例,允許存在;但不應在新的代碼中延續(xù)舊的風格。
        對于第三方模塊,可能不符合本規(guī)范,也應看作可以容忍的特例,允許存在;但不應在新的代碼中使用第三方模塊的風格。
        tab 與空格混用的縮進是不可容忍的,在運行項目時應使用 –t 或 –tt 選項排查這種可能性存在。出現(xiàn)混用的情況時,如果是公司開發(fā)的基礎類庫代碼,應當通知類庫維護人員修改;第三方模塊則可以通過提交 patch 等方式敦促開發(fā)者修正問題。

    已有風格


        開發(fā)人員往往在加入項目之前已經形成自有的編碼風格,加入項目后應以本規(guī)范為準編寫代碼。特別是匈牙利命名法,因為帶有類型信息,并不適合 Python 編程,不應在 Python 項目中應用。
    posted on 2010-05-14 02:59 seal 閱讀(394) 評論(0)  編輯  收藏 所屬分類: Python
    主站蜘蛛池模板: 国产成年无码久久久免费| 国产中文字幕在线免费观看| 免费人妻无码不卡中文字幕系| 亚洲第一福利网站在线观看| 国产精品久久久久久亚洲小说| 日韩人妻无码免费视频一区二区三区| 亚洲熟伦熟女专区hd高清| 在线观看免费宅男视频| 亚洲av色香蕉一区二区三区| 国产成人高清精品免费软件| 国产区图片区小说区亚洲区| 无码不卡亚洲成?人片| 一个人免费播放在线视频看片| 国产性爱在线观看亚洲黄色一级片 | 亚洲一区欧洲一区| 无码高潮少妇毛多水多水免费| 亚洲成年网站在线观看| 欧美好看的免费电影在线观看 | 亚洲黄色片免费看| 国产免费久久精品99re丫y| 亚洲人成网站色7799| 国产午夜鲁丝片AV无码免费| 欧洲乱码伦视频免费国产| 亚洲色自偷自拍另类小说| 日韩免费无码视频一区二区三区| 亚洲码一区二区三区| 成年女人永久免费观看片| 亚洲天堂免费在线视频| 久久精品国产亚洲AV高清热| 扒开双腿猛进入爽爽免费视频 | 最近中文字幕大全免费视频| 亚洲综合一区二区三区四区五区| 国产性生交xxxxx免费| 免费在线黄色电影| 日本亚洲精品色婷婷在线影院 | 国产亚洲福利精品一区| 免费H网站在线观看的| 粉色视频免费入口| 亚洲五月六月丁香激情| 韩国免费三片在线视频| 免费91麻豆精品国产自产在线观看|