Google開(kāi)源項(xiàng)目風(fēng)格指南之 Python(二)

概要

文件和sockets镣典,todo注釋钢坦,導(dǎo)入格式竹伸,語(yǔ)句笛坦,訪問(wèn)控制粒梦,命名晦嵌,Main

內(nèi)容

文件和sockets

在文件和sockets結(jié)束時(shí)候同辣,顯示的關(guān)閉它 除了文件之外拷姿,sockets或其他類似文件的對(duì)象在沒(méi)有必要的情況下打開(kāi),會(huì)有很多副作用: 1可能會(huì)消耗有限的系統(tǒng)資源旱函,如文件描述符响巢,如果這些資源在使用后沒(méi)有及時(shí)歸還系統(tǒng),用于處理這些對(duì)象的代碼會(huì)將資源消耗殆盡 2持有文件將會(huì)阻止文件的其他操作棒妨,比如移動(dòng)刪除之類 3僅僅從邏輯上關(guān)閉文件和sockets踪古,它們?nèi)匀豢赡軙?huì)被共享的程序進(jìn)行讀寫(xiě)操作 幻想當(dāng)文件對(duì)象析構(gòu)時(shí), 文件和sockets會(huì)自動(dòng)關(guān)閉, 試圖將文件對(duì)象的生命周期和文件的狀態(tài)綁定在一起的想法, 都是不現(xiàn)實(shí)的. 因?yàn)橛腥缦略? 1沒(méi)有任何方法可以確保運(yùn)行環(huán)境會(huì)真正的執(zhí)行文件的析構(gòu). 不同的Python實(shí)現(xiàn)采用不同的內(nèi)存管理技術(shù), 比如延時(shí)垃圾處理機(jī)制. 延時(shí)垃圾處理機(jī)制可能會(huì)導(dǎo)致對(duì)象生命周期被任意無(wú)限制的延長(zhǎng). 2對(duì)于文件意外的引用,會(huì)導(dǎo)致對(duì)于文件的持有時(shí)間超出預(yù)期(比如對(duì)于異常的跟蹤, 包含有全局變量等).

使用with語(yǔ)句管理文件:

with open("hello.txt") as hello_file:
    for line in hello_file:
        print line

對(duì)于不支持with語(yǔ)句的類似文件的對(duì)象,使用contextlib.closing():

import contextlib

with contextlib.closing(urllib.urlopen("http://www.python.org/")) as front_page:
    for line in front_page:
        print line

TODO注釋

為臨時(shí)代碼使用todo注釋券腔,是一種短期解決方案 TODO注釋?xiě)?yīng)該在所有開(kāi)頭處包含”TODO”字符串, 緊跟著是用括號(hào)括起來(lái)的你的名字, email地址或其它標(biāo)識(shí)符. 然后是一個(gè)可選的冒號(hào). 接著必須有一行注釋, 解釋要做什么. 主要目的是為了有一個(gè)統(tǒng)一的TODO格式, 這樣添加注釋的人就可以搜索到(并可以按需提供更多細(xì)節(jié)). 寫(xiě)了TODO注釋并不保證寫(xiě)的人會(huì)親自解決問(wèn)題. 當(dāng)你寫(xiě)了一個(gè)TODO, 請(qǐng)注上你的名字. 如果你的TODO是”將來(lái)做某事”的形式, 那么請(qǐng)確保你包含了一個(gè)指定的日期(“2009年11月解決”)或者一個(gè)特定的事件(“等到所有的客戶都可以處理XML請(qǐng)求就移除這些代碼”).
# TODO(kl@gmail.com): Use a "*" here for string repetition.
# TODO(Zeke) Change this to use relations.

導(dǎo)入格式

每個(gè)導(dǎo)入應(yīng)該獨(dú)占一行 導(dǎo)入總應(yīng)該放在文件頂部, 位于模塊注釋和文檔字符串之后, 模塊全局變量和常量之前. 導(dǎo)入應(yīng)該按照從最通用到最不通用的順序分組: 1標(biāo)準(zhǔn)庫(kù)導(dǎo)入 2第三方庫(kù)導(dǎo)入 3應(yīng)用程序指定導(dǎo)入 每種分組中, 應(yīng)該根據(jù)每個(gè)模塊的完整包路徑按字典序排序, 忽略大小寫(xiě)

語(yǔ)句

通常每個(gè)語(yǔ)句應(yīng)該獨(dú)占一行 不過(guò), 如果測(cè)試結(jié)果與測(cè)試語(yǔ)句在一行放得下, 你也可以將它們放在同一行 如果是if語(yǔ)句, 只有在沒(méi)有else時(shí)才能這樣做. 特別地, 絕不要對(duì) try/except這樣做, 因?yàn)閠ry和except不能放在同一行.

訪問(wèn)控制

在python中伏穆,對(duì)于瑣碎的不太重要的訪問(wèn)函數(shù),使用公有變量來(lái)取代它們 這樣可以避免額外的函數(shù)調(diào)用開(kāi)銷(xiāo)纷纫, 當(dāng)增加更多功能時(shí)候枕扫,可以用屬性property來(lái)保持語(yǔ)法的一致性 另一方面,如果訪問(wèn)更復(fù)雜辱魁,或者變量的訪問(wèn)開(kāi)銷(xiāo)很顯著.那么你應(yīng)該使用像 get_foo()和set_foo()這樣的函數(shù)調(diào)用烟瞧,如果之前的代碼行為允許通過(guò)屬性訪問(wèn),那么 就不要將新的訪問(wèn)函數(shù)和屬性綁定染簇,這樣参滴,任何試圖通過(guò)老方法訪問(wèn)變量的代碼就沒(méi)法運(yùn)行,使用者也就意識(shí)到復(fù)雜性發(fā)生了變化

命名

module_name package_name ClassName method_name ExceptionName 
function_name GLOBAL_VAR_NAME instance_var_name
function_parameter_name  local_var_name

應(yīng)該避免的名稱 單字符名稱锻弓,除了計(jì)數(shù)器和迭代器 包/模塊名中的連字符- 雙下劃線開(kāi)頭并結(jié)尾的名稱(python保留砾赔,例如__init__)
命名約定: 1所謂內(nèi)部internal表示僅模塊內(nèi)可用,或者青灼,在類內(nèi)是保護(hù)或者私有的 2 用單下劃線開(kāi)頭表示模塊變量或函數(shù)是protected的(使用import * from 時(shí)候不會(huì)包含) 3用下劃線__開(kāi)頭的實(shí)例變量或方法表示類內(nèi)私有 4將相關(guān)的類和頂級(jí)函數(shù)放在同一個(gè)模塊中 5對(duì)類名使用大寫(xiě)字母開(kāi)頭的單詞 模塊名應(yīng)該用小寫(xiě)加下劃線的方式暴心,
python之父Guido推薦的規(guī)范

Type Public Internal
Modules lower_with_under _lower_with_under
Packages lower_with_under
Classes CapWords _CapWords
Exceptions CapWords
Functions lower_with_under() _lower_with_under()
Global/Class Constants CAPS_WITH_UNDER _CAPS_WITH_UNDER
Global/Class Variables lower_with_under _lower_with_under
Instance Variables lower_with_under _lower_with_under (protected) or __lower_with_under (private)
Method Names lower_with_under() _lower_with_under() (protected) or __lower_with_under() (private)
Function/Method Parameters/Class Variables lower_with_under
Local Variables lower_with_under
推薦風(fēng)格.png

Main

即使是一個(gè)打算被當(dāng)作腳本的文件,也應(yīng)該是可以導(dǎo)入的聚至,并且簡(jiǎn)單的導(dǎo)入不應(yīng)該導(dǎo)致這個(gè)腳本的主功能main functionality被執(zhí)行酷勺,這是一種副作用,主功能應(yīng)該放在一個(gè)main()函數(shù)中 在Python中, pydoc以及單元測(cè)試要求模塊必須是可導(dǎo)入的. 你的代碼應(yīng)該在執(zhí)行主程序前總是檢查if __name__ == '__main__', 這樣當(dāng)模塊被導(dǎo)入時(shí)主程序就不會(huì)被執(zhí)行. 所有的頂級(jí)代碼在模塊導(dǎo)入時(shí)都會(huì)被執(zhí)行. 要小心不要去調(diào)用函數(shù), 創(chuàng)建對(duì)象, 或者執(zhí)行那些不應(yīng)該在使用pydoc時(shí)執(zhí)行的操作.

引用
Google開(kāi)源項(xiàng)目風(fēng)格指南

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末扳躬,一起剝皮案震驚了整個(gè)濱河市脆诉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贷币,老刑警劉巖击胜,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異役纹,居然都是意外死亡偶摔,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)促脉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)辰斋,“玉大人策州,你說(shuō)我怎么就攤上這事」蹋” “怎么了够挂?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)藕夫。 經(jīng)常有香客問(wèn)我孽糖,道長(zhǎng),這世上最難降的妖魔是什么毅贮? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任办悟,我火速辦了婚禮,結(jié)果婚禮上滩褥,老公的妹妹穿的比我還像新娘病蛉。我一直安慰自己,他們只是感情好瑰煎,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布铡恕。 她就那樣靜靜地躺著,像睡著了一般丢间。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上驹针,一...
    開(kāi)封第一講書(shū)人閱讀 52,268評(píng)論 1 309
  • 那天烘挫,我揣著相機(jī)與錄音,去河邊找鬼柬甥。 笑死饮六,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的苛蒲。 我是一名探鬼主播卤橄,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼臂外!你這毒婦竟也來(lái)了窟扑?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤漏健,失蹤者是張志新(化名)和其女友劉穎嚎货,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蔫浆,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡殖属,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瓦盛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片洗显。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡外潜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出挠唆,到底是詐尸還是另有隱情处窥,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布损搬,位于F島的核電站碧库,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏巧勤。R本人自食惡果不足惜嵌灰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望颅悉。 院中可真熱鬧沽瞭,春花似錦、人聲如沸剩瓶。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)延曙。三九已至豌鹤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間枝缔,已是汗流浹背布疙。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留愿卸,地道東北人灵临。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像趴荸,于是被迫代替她去往敵國(guó)和親儒溉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Python是一種對(duì)代碼風(fēng)格很重視的語(yǔ)言发钝,從縮進(jìn)就能看出這一點(diǎn)顿涣,Python強(qiáng)調(diào)易于理解。最近在負(fù)責(zé)代碼重構(gòu)的工作...
    知曰閱讀 10,917評(píng)論 1 85
  • 源地址:http://www.runoob.com/w3cnote/google-python-styleguid...
    skaiger閱讀 506評(píng)論 0 0
  • 定義類并創(chuàng)建實(shí)例 在Python中笼平,類通過(guò) class 關(guān)鍵字定義园骆。以 Person 為例,定義一個(gè)Person類...
    績(jī)重KF閱讀 3,954評(píng)論 0 13
  • 更新時(shí)間:2016/5/13 介紹 本文檔所提供的編碼規(guī)范寓调,適用于主要的Python發(fā)行版中組成標(biāo)準(zhǔn)庫(kù)的Pytho...
    超net閱讀 5,867評(píng)論 0 15
  • 很多人都說(shuō),現(xiàn)年味越來(lái)越淡了晌涕,不再是小時(shí)候過(guò)年前從臘月便開(kāi)始的心心念念翹首以待滋捶,也不再是快過(guò)年時(shí)家家戶戶窗戶里飄出...
    安小漁閱讀 502評(píng)論 5 5