Python開(kāi)發(fā)編碼規(guī)范.doc_第1頁(yè)
Python開(kāi)發(fā)編碼規(guī)范.doc_第2頁(yè)
Python開(kāi)發(fā)編碼規(guī)范.doc_第3頁(yè)
Python開(kāi)發(fā)編碼規(guī)范.doc_第4頁(yè)
Python開(kāi)發(fā)編碼規(guī)范.doc_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Python開(kāi)發(fā)編碼規(guī)范目 錄1代碼的布局31.1縮進(jìn)31.2制表符還是空格?31.3行的最大長(zhǎng)度31.4空行32編碼42.1導(dǎo)入42.2空格52.3其它建議(Other Recommendations)62.4注釋72.4.1注釋塊72.4.2行內(nèi)注釋72.5文檔化82.6版本注記92.7命名約定92.7.1描述:命名風(fēng)格102.7.2說(shuō)明:命名約定112.7.3應(yīng)避免的名字112.7.3.1模塊名(Module Names)112.7.3.2類名(Class Names)112.7.3.3異常名(Exception Names)112.7.3.4全局變量名(Global Variable Names)122.7.3.5函數(shù)名(Function Names)122.7.3.6方法名和實(shí)例變量(Method Names and Instance Variables)122.7.3.7繼承的設(shè)計(jì)(Designing for inheritance)123設(shè)計(jì)建議(Programming Recommendations)141 代碼的布局1.1 縮進(jìn)使用Emacs的Python-mode的默認(rèn)值:4個(gè)空格一個(gè)縮進(jìn)層次。 對(duì)于確實(shí)古老的代碼,你不希望產(chǎn)生混亂,可以繼續(xù)使用8空格的制表符(8-space tabs)。 Emacs Python-mode自動(dòng)發(fā)現(xiàn)文件中主要的縮進(jìn)層次,依此設(shè)定縮進(jìn)參數(shù)。1.2 制表符還是空格?永遠(yuǎn)不要混用制表符和空格。最流行的Python縮進(jìn)方式是僅使用空格, 其次是僅使用制表符?;旌现票矸涂崭窨s進(jìn)的代碼將被轉(zhuǎn)換成僅使用空格。 (在Emacs中,選中整個(gè)緩沖區(qū),按ESC-x去除制表符(untabify)。) 調(diào)用python命令行解釋器時(shí)使用-t選項(xiàng),可對(duì)代碼中不合法得混合制表符和空格發(fā)出警告(warnings)。 使用-tt時(shí)警告(warnings)將變成錯(cuò)誤(errors)。這些選項(xiàng)是被高度推薦的。 對(duì)于新的項(xiàng)目,強(qiáng)烈推薦僅使用空格(spaces-only)而不是制表符。 許多編輯器擁有使之易于實(shí)現(xiàn)的功能。(在Emacs中,確認(rèn)indent-tabs-mode是nil)。1.3 行的最大長(zhǎng)度周圍仍然有許多設(shè)備被限制在每行80字符;而且,窗口限制在80個(gè)字符 使將多個(gè)窗口并排放置成為可能。在這些設(shè)備上使用默認(rèn)的折疊(wrapping)方式看起來(lái)有點(diǎn)丑陋。 因此,請(qǐng)將所有行限制在最大79字符(Emacs準(zhǔn)確得將行限制為長(zhǎng)80字符), 對(duì)順序排放的大塊文本(文檔字符串或注釋),推薦將長(zhǎng)度限制在72字符。 折疊長(zhǎng)行的首選方法是使用Pyhon支持的圓括號(hào),方括號(hào)(brackets)和花括號(hào)(braces)內(nèi)的行延續(xù)。 如果需要,你可以在表達(dá)式周圍增加一對(duì)額外的圓括號(hào), 但是有時(shí)使用反斜杠看起來(lái)更好。確認(rèn)恰當(dāng)?shù)每s進(jìn)了延續(xù)的行。 Emacs的Python-mode正確得完成了這些。一些例子:Toggle line numbers 1 class Rectangle(Blob): 2 3 def _init_(self, width, height, 4 color=black, emphasis=None, highlight=0): 5 if width = 0 and height = 0 and color = red and emphasis = strong or highlight 100: 6 raise ValueError, sorry, you lose 7 if width = 0 and height = 0 and (color = red or 8 emphasis is None): 9 raise ValueError, I dont think so 10 Blob。_init_(self, width, height, 11 color, emphasis, highlight)1.4 空行用兩行空行分割頂層函數(shù)和類的定義,類內(nèi)方法的定義用單個(gè)空行分割。 額外的空行可被用于(保守的(sparingly)分割相關(guān)函數(shù)組成的群(groups of related functions)。 在一組相關(guān)的單句中間可以省略空行。(例如。一組啞元(a set of dummy implementations)。 當(dāng)空行用于分割方法(method)的定義時(shí),在class行和第一個(gè)方法定義之間也要有一個(gè)空行。 在函數(shù)中使用空行時(shí),請(qǐng)謹(jǐn)慎的用于表示一個(gè)邏輯段落(indicate logical sections)。 Python接受contol-L(即L)換頁(yè)符作為空格;Emacs(和一些打印工具) 視這個(gè)字符為頁(yè)面分割符,因此在你的文件中,可以用他們來(lái)為相關(guān)片段(sections)分頁(yè)。 2 編碼Python核心發(fā)布中的代碼必須始終使用ASCII或Latin-1編碼(又名 ISO-8859-1)。 使用ASCII的文件不必有譯碼cookie(coding cookie)。 Latin-1僅當(dāng)注釋或文檔字符串涉及作者名字需要Latin-1時(shí)才被使用; 另外使用x轉(zhuǎn)義字符是在字符串中包含非ASCII(non-ASCII)數(shù)據(jù)的首選方法。 作為PEP 263實(shí)現(xiàn)代碼的測(cè)試套件的部分文件是個(gè)例外。 Python 2。4 以后內(nèi)核支持 Unicode 了! 不論什么情況使用 UTF-8 吧!2.1 導(dǎo)入通常應(yīng)該在單獨(dú)的行中導(dǎo)入(Imports),例如: No: import sys, osYes: import sysimport os但是這樣也是可以的: from types import StringType, ListTypeImports 通常被放置在文件的頂部,僅在模塊注釋和文檔字符串之后,在模塊的全局變量和常量之前。Imports應(yīng)該有順序地成組安放。 1。 標(biāo)準(zhǔn)庫(kù)的導(dǎo)入(Imports ) 2。 相關(guān)的主包(major package)的導(dǎo)入(即,所有的email包在隨后導(dǎo)入) 3。 特定應(yīng)用的導(dǎo)入(imports) 你應(yīng)該在每組導(dǎo)入之間放置一個(gè)空行。對(duì)于內(nèi)部包的導(dǎo)入是不推薦使用相對(duì)導(dǎo)入的。對(duì)所有導(dǎo)入都要使用包的絕對(duì)路徑。從一個(gè)包含類的模塊中導(dǎo)入類時(shí),通??梢詫?xiě)成這樣: from MyClass import MyClass from foo。bar。YourClass import YourClass如果這樣寫(xiě)導(dǎo)致了本地名字沖突,那么就這樣寫(xiě) import MyClass import foo。bar。YourClass * 即使用MyClass。MyClass和foo。bar。YourClass。YourClass 2.2 空格(Whitespace in Expressions and Statements) * Guido不喜歡在以下地方出現(xiàn)空格: * spam( ham 1 , eggs: 2 )。 Always write this as spam(ham1, eggs: 2)。 o 緊挨著圓括號(hào),方括號(hào)和花括號(hào)的,如:spam( ham 1 , eggs: 2 )。 要始終將它寫(xiě)成spam(ham1, eggs: 2)。 if x = 4 : print x , y ; x , y = y , x。 Always write this as if x = 4: print x, y; x, y = y, x。 o 緊貼在逗號(hào),分號(hào)或冒號(hào)前的,如: if x = 4 : print x , y ; x , y = y , x。 要始終將它寫(xiě)成 if x = 4: print x, y; x, y = y, x。 o 緊貼著函數(shù)調(diào)用的參數(shù)列表前開(kāi)式括號(hào)(open parenthesis )的,如spam (1)。要始終將它寫(xiě)成spam(1)。 slicing, as in: dict key = list index。 Always write this as dictkey = listindex。 o 緊貼在索引或切片(slicing?下標(biāo)?)開(kāi)始的開(kāi)式括號(hào)前的,如: dict key = list index。要始終將它寫(xiě)成dictkey = listindex。 o 在賦值(或其它)運(yùn)算符周圍的用于和其它并排的一個(gè)以上的空格,如: Toggle line numbers 1 x = 1 2 y = 2 3 long_variable = 3 * 要始終將它寫(xiě)成 Toggle line numbers 1 x = 1 2 y = 2 3 long_variable = 3 * (不要對(duì)以上任意一條和他爭(zhēng)論 - Guido 養(yǎng)成這樣的風(fēng)格超過(guò)20年了。) 2.3 其它建議(Other Recommendations) 始終在這些二元運(yùn)算符兩邊放置一個(gè)空格:賦值(=), 比較(=, , !=, , =, in, not in, is, is not), 布爾運(yùn)算 (and, or, not)。 * 按你的看法在算術(shù)運(yùn)算符周圍插入空格。 始終保持二元運(yùn)算符兩邊空格的一致。 * 一些例子: Toggle line numbers 1 i = i+1 2 submitted = submitted + 1 3 x = x*2 - 1 4 hypot2 = x*x + y*y 5 c = (a+b) * (a-b) 6 c = (a + b) * (a - b) * 不要在用于指定關(guān)鍵字參數(shù)或默認(rèn)參數(shù)值的=號(hào)周圍使用空格,例如: Toggle line numbers 1 def complex(real, imag=0。0): 2 return magic(r=real, i=imag) * 不要將多條語(yǔ)句寫(xiě)在同一行上。 No: if foo = blah: do_blah_thing() Yes: if foo = blah: do_blah_thing() No: do_one(); do_two(); do_three() Yes: do_one() do_two() do_three()2.4 注釋(Comments) * 同代碼不一致的注釋比沒(méi)注釋更差。當(dāng)代碼修改時(shí),始終優(yōu)先更新注釋! 注釋?xiě)?yīng)該是完整的句子。 如果注釋是一個(gè)短語(yǔ)或句子,首字母應(yīng)該大寫(xiě), 除非他是一個(gè)以小寫(xiě)字母開(kāi)頭的標(biāo)識(shí)符(永遠(yuǎn)不要修改標(biāo)識(shí)符的大小寫(xiě))。 如果注釋很短,最好省略末尾的句號(hào)(period?結(jié)尾句末的停頓?也可以是逗號(hào)吧,) 注釋塊通常由一個(gè)或多個(gè)由完整句子構(gòu)成的段落組成,每個(gè)句子應(yīng)該以句號(hào)結(jié)尾。 你應(yīng)該在句末,句號(hào)后使用兩個(gè)空格,以便使Emacs的斷行和填充工作協(xié)調(diào)一致 (譯按:應(yīng)該說(shuō)是使這兩種功能正常工作,。 給出了文檔結(jié)構(gòu)的提示)。 用英語(yǔ)書(shū)寫(xiě)時(shí),斷詞和空格是可用的。 非英語(yǔ)國(guó)家的Python程序員:請(qǐng)用英語(yǔ)書(shū)寫(xiě)你的注釋,除非你120%的確信 這些代碼不會(huì)被不懂你的語(yǔ)言的人閱讀。 我就是堅(jiān)持全部使用中文來(lái)注釋,真正要發(fā)布腳本工具時(shí),再想E文的; 開(kāi)發(fā)時(shí)每一瞬間都要用在思量中,堅(jiān)決不用在E文語(yǔ)法,單詞的回憶中!- ZoomQUiet * 約定使用統(tǒng)一的文檔化注釋格式有利于良好習(xí)慣和團(tuán)隊(duì)建議!- CodeCommentingRule 2.4.1 注釋塊(Block Comments) * 注釋塊通常應(yīng)用于跟隨著一些(或者全部)代碼并和這些代碼有著相同的縮進(jìn)層次。 注釋塊中每行以#和一個(gè)空格開(kāi)始(除非他是注釋內(nèi)的縮進(jìn)文本)。 注釋塊內(nèi)的段落以僅含單個(gè)#的行分割。 注釋塊上下方最好有一空行包圍(或上方兩行下方一行,對(duì)一個(gè)新函數(shù)定義段的注釋)。 2.4.2 行內(nèi)注釋(Inline Comments) * (inline?內(nèi)聯(lián)?翻成行內(nèi)比較好吧) o 一個(gè)行內(nèi)注釋是和語(yǔ)句在同一行的注釋。行內(nèi)注釋?xiě)?yīng)該謹(jǐn)慎適用。 行內(nèi)注釋?xiě)?yīng)該至少用兩個(gè)空格和語(yǔ)句分開(kāi)。 它們應(yīng)該以#和單個(gè)空格開(kāi)始。 x = x+1 # Increment x * 如果語(yǔ)意是很明了的,那么行內(nèi)注釋是不必要的,事實(shí)上是應(yīng)該被去掉的。 不要這樣寫(xiě): x = x+1 # Increment x x = x+1 # Compensate for border * 但是有時(shí),這樣是有益的: x = x+1 # Compensate for border2.5 文檔化(Documentation Strings) * Conventions for writing good documentation strings (a。k。a。 docstrings) are immortalized in PEP 257。 應(yīng)該一直遵守編寫(xiě)好的文檔字符串(又名docstrings)的約定(?實(shí)在不知道怎么譯) Documentation Strings- 文檔化字符 ; 為配合 pydoc;epydoc,Doxygen等等文檔化工具的使用,類似于MoinMoin 語(yǔ)法,約定一些字符,以便自動(dòng)提取轉(zhuǎn)化為有意義的文檔章節(jié)等等文章元素!- Zoomq * 為所有公共模塊,函數(shù),類和方法編寫(xiě)文檔字符串。文檔字符串對(duì)非公開(kāi)的方法不是必要的,但你應(yīng)該有一個(gè)描述這個(gè)方法做什么的注釋。這個(gè)注釋?xiě)?yīng)該在def這行后。 * PEP 257 描述了好的文檔字符串的約定。一定注意,多行文檔字符串結(jié)尾的 應(yīng)該單獨(dú)成行,例如: Return a foobang Optional plotz says to frobnicate the bizbaz first。 * 對(duì)單行的文檔字符串,結(jié)尾的在同一行也可以。 實(shí)際上Python 自個(gè)兒就使用文檔化編碼維護(hù)著所有內(nèi)置對(duì)象的使用說(shuō)明 不信的話常試: #python import time dir(time)_doc_, _file_, _name_, accept2dyear, altzone, asctime, clock, ctime, daylight, gmtime, localtime, mktime, sleep, strftime, strptime, struct_time, time, timezone, tzname, tzset help(time。time)Help on built-in function time in module time:time(。) time() - floating point number Return the current time in seconds since the Epoch。 Fractions of a second may be present if the system clock provides them。2.6 版本注記(Version Bookkeeping) (我覺(jué)得叫注記更好) * 如果你要將RCS或CVS的雜項(xiàng)(crud)包含在你的源文件中,按如下做。 Toggle line numbers 1 _version_ = $Revision: 1。4 $ 2 # $Source: E:/cvsroot/python_doc/pep8。txt,v $ * 這個(gè)行應(yīng)該包含在模塊的文檔字符串之后,所有代碼之前,上下用一個(gè)空行分割。 對(duì)于CVS的服務(wù)器工作標(biāo)記更應(yīng)該在代碼段中明確出它的使用 如:在文檔的最開(kāi)始的版權(quán)聲明后應(yīng)加入如下版本標(biāo)記:# 文件:$id$# 版本: $Revision$這樣的標(biāo)記在提交給配置管理服務(wù)器后,會(huì)自動(dòng)適配成為相應(yīng)的字符串,如:# 文件:$Id: ussp。py,v 1。22 2004/07/21 04:47:41 hd Exp $# 版本: $Revision: 1。4 $-HD2.7 命名約定 * Python庫(kù)的命名約定有點(diǎn)混亂,所以我們將永遠(yuǎn)不能使之變得完全一致- 不過(guò)還是有公認(rèn)的命名規(guī)范的。 新的模塊和包(包括第三方的框架)必須符合這些標(biāo)準(zhǔn),但對(duì)已有的庫(kù)存在不同風(fēng)格的, 保持內(nèi)部的一致性是首選的。 2.7.1 描述:命名風(fēng)格 * 有許多不同的命名風(fēng)格。以下的有助于辨認(rèn)正在使用的命名風(fēng)格,獨(dú)立于它們的作用。 以下的命名風(fēng)格是眾所周知的: * b (單個(gè)小寫(xiě)字母) * B (單個(gè)大寫(xiě)字母) * 小寫(xiě)串 如:getname * 帶下劃的小寫(xiě)串 如:_getname * 大寫(xiě)串 如:GETNAME * 帶下劃的大寫(xiě)串 如:_GETNAME * CapitalizedWords(首字母大寫(xiě)單詞串) (或 CapWords, CamelCase - 這樣命名是由于它的字母錯(cuò)落有致的樣子而來(lái)的。 o 這有時(shí)也被當(dāng)作StudlyCaps。 如:GetName * mixedCase (混合大小寫(xiě)串)(與首字母大寫(xiě)串不同之處在于第一個(gè)字符是小寫(xiě)如:getName) * Capitalized_Words_With_Underscores(帶下劃線的首字母大寫(xiě)串) (丑陋!) 還有一種使用特別前綴的風(fēng)格,用于將相關(guān)的名字分成組。這在Python中不常用, 但是出于完整性要提一下。例如,os。stat()函數(shù)返回一個(gè)tuple, 他的元素傳統(tǒng)上有象st_mode, st_size, st_mtime等等這樣的名字。 X11庫(kù)的所有公開(kāi)函數(shù)以X開(kāi)頭。(在Python中,這個(gè)風(fēng)格通常認(rèn)為是不必要的, 因?yàn)閷傩院头椒詫?duì)象作前綴,而函數(shù)名以模塊名作前綴。) 另外,以下用下劃線作前導(dǎo)或結(jié)尾的特殊形式是被公認(rèn)的(這些通??梢院腿魏瘟?xí)慣組合(使用?): * _single_leading_underscore(以一個(gè)下劃線作前導(dǎo)): 弱的內(nèi)部使用(internal use)標(biāo)志。 o (例如,from M import *不會(huì)導(dǎo)入以下劃線開(kāi)頭的對(duì)象)。 * single_trailing_underscore_(以一個(gè)下劃線結(jié)尾): 用于避免與Python關(guān)鍵詞的沖突,例如。 o Tkinter。Toplevel(master, class_=ClassName)。 * _double_leading_underscore(雙下劃線): 從Python 1。4起為類私有名。 * _double_leading_and_trailing_underscore_: 特殊的(magic) 對(duì)象或?qū)傩?存在于用戶控制的(user-controlled)名字空間, 例如:_init_, _import_ 或 _file_。 有時(shí)它們被用戶定義, 用于觸發(fā)某個(gè)特殊行為(magic behavior)(例如:運(yùn)算符重載); 有時(shí)被構(gòu)造器(infrastructure)插入,以便自己使用或?yàn)榱苏{(diào)試。 因此,在未來(lái)的版本中,構(gòu)造器(松散得定義為Python解釋器和標(biāo)準(zhǔn)庫(kù)) 可能打算建立自己的魔法屬性列表,用戶代碼通常應(yīng)該限制將這種約定作為己用。 欲成為構(gòu)造器的一部分的用戶代碼可以在下滑線中結(jié)合使用短前綴,例如。 _bobo_magic_attr_。 2.7.2 說(shuō)明:命名約定(Prescriptive: Naming Conventions)2.7.3 應(yīng)避免的名字(Names to Avoid) * 永遠(yuǎn)不要用字符l(小寫(xiě)字母el(就是讀音,下同), O(大寫(xiě)字母oh),或I(大寫(xiě)字母eye)作為單字符的變量名。 在某些字體中,這些字符不能與數(shù)字1和0分開(kāi)。當(dāng)想要使用l時(shí),用L代替它。 2.7.3.1 模塊名(Module Names) * 模塊應(yīng)該是不含下劃線的,簡(jiǎn)短的,小寫(xiě)的名字。 因?yàn)槟K名被映射到文件名, 有些文件系統(tǒng)大小寫(xiě)不敏感并且截短長(zhǎng)名字, 模塊名被選為相當(dāng)短是重要的-這在Unix上不是問(wèn)題, 但當(dāng)代碼傳到Mac 或Windows上就可能是個(gè)問(wèn)題了。 當(dāng)一個(gè)用C或C+寫(xiě)的擴(kuò)展模塊有一個(gè)伴隨的Python模塊,這個(gè)Python模塊提供了 o 一個(gè)更高層(例如,更面向?qū)ο?的接口時(shí),C/C+模塊有一個(gè)前導(dǎo)下劃線(如:_socket) Python包應(yīng)該是不含下劃線的,簡(jiǎn)短的,全小寫(xiě)的名字。 2.7.3.2 類名(Class Names) * 幾乎沒(méi)有例外,類名總是使用首字母大寫(xiě)單詞串(CapWords)的約定。 2.7.3.3 異常名(Exception Names) * 如果模塊對(duì)所有情況定義了單個(gè)異常,它通常被叫做error或Error。 似乎內(nèi)建(擴(kuò)展)的模塊使用error(例如:os。error), 而Python模塊通常用Error (例如: xdrlib。Error)。 趨勢(shì)似乎是傾向使用CapWords異常名。 2.7.3.4 全局變量名(Global Variable Names) * (讓我們希望這些變量打算只被用于模塊內(nèi)部) 這些約定與那些用于函數(shù)的約定差不多。被設(shè)計(jì)可以通過(guò)from M import *來(lái)使用的 o 那些模塊,應(yīng)該在那些不想被導(dǎo)入的全局變量(還有內(nèi)部函數(shù)和類)前加一個(gè)下劃線)。 2.7.3.5 函數(shù)名(Function Names) * 函數(shù)名應(yīng)該為小寫(xiě),可能用下劃線風(fēng)格單詞以增加可讀性。 mixedCase僅被允許用于這種風(fēng)格已經(jīng)占優(yōu)勢(shì)的上下文(如: threading。py) 以便保持向后兼容。 2.7.3.6 方法名和實(shí)例變量(Method Names and Instance Variables) * 這段大體上和函數(shù)相同:通常使用小寫(xiě)單詞,必要時(shí)用下劃線分隔增加可讀性。 使用一個(gè)前導(dǎo)下劃線僅用于不打算作為類的公共接口的內(nèi)部方法和實(shí)例變量。 Python不強(qiáng)制要求這樣; 它取決于程序員是否遵守這個(gè)約定。 使用兩個(gè)前導(dǎo)下劃線以表示類私有的名字。 Python將這些名字和類名連接在一起: 如果類Foo有一個(gè)屬性名為 _a, 它不能以Foo。_a訪問(wèn)。 (執(zhí)著的用戶(An insistent user)還是可以通過(guò)Foo。_Foo_a得到訪問(wèn)權(quán)。) 通常,雙前導(dǎo)下劃線應(yīng)該只用來(lái)避免與類(為可以子類化所設(shè)計(jì))中的屬性發(fā)生名字沖突。 2.7.3.7 繼承的設(shè)計(jì)(Designing for inheritance) * 始終要確定一個(gè)類中的方法和實(shí)例變量是否要被公開(kāi)。 通常,永遠(yuǎn)不要將數(shù)據(jù)變量公開(kāi),除非你實(shí)現(xiàn)的本質(zhì)上只是記錄。 人們總是更喜歡給類提供一個(gè)函數(shù)的接口作為替換 (Python 2。2 的一些開(kāi)發(fā)者在這點(diǎn)上做得非常漂亮)。 同樣,確定你的屬性是否應(yīng)為私有的。私有與非公有的區(qū)別在于: 前者永遠(yuǎn)不會(huì)被用在一個(gè)派生類中,而后者可能會(huì)。 是的,你應(yīng)該在大腦中就用繼承設(shè)計(jì)好了你的類。 私有屬性必須有兩個(gè)前導(dǎo)下劃線,無(wú)后置下劃線。 非公有屬性必須有一個(gè)前導(dǎo)下劃線,無(wú)后置下劃線。 公共屬性沒(méi)有前導(dǎo)和后置下劃線,除非它們與保留字沖突, 在此情況下,單個(gè)后置下劃線比前置或混亂的拼寫(xiě)要好, 例如:class_優(yōu)于klass。 最后一點(diǎn)有些爭(zhēng)議; 如果相比class_你更喜歡klass,那么這只是一致性問(wèn)題。 3 設(shè)計(jì)建議(Programming Recommendations) * 同象None之類的單值進(jìn)行比較,應(yīng)該永遠(yuǎn)用:is或is not來(lái)做。 當(dāng)你本意是if x is not None時(shí),對(duì)寫(xiě)成if x要小心 - 例如當(dāng)你測(cè)試一個(gè)默認(rèn)為None的變量或參數(shù)是否被設(shè)置為其它值時(shí)。 這個(gè)其它值可能是一個(gè)在布爾上下文中為假的值! * 基于類的異??偸呛眠^(guò)基于字符串的異常。 模塊和包應(yīng)該定義它們自己的域內(nèi)特定的基異常類(base exception class), 基類應(yīng)該是內(nèi)建的Exception類的子類。 還始終包含一個(gè)類的文檔字符串。例如: Toggle line numbers 1 class MessageError(Exception): 2 Base class for errors in the email package。 * 使用字符串

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論