pep 8 規范的一些記錄

一、pep8起源

龜叔創立Python的初衷里就有創立一個容易閱讀的編程語言,所以親自操刀寫了pep8 代碼規范,每個項目開始前都要有一個共識,就是自己的代碼規范,pep8 就是一個很好的范本。

二、官網鏈接

  https://www.python.org/dev/peps/pep-0008/

  中文翻譯鏈接

  https://my.oschina.net/u/1433482/blog/464444

三、重要總結

  一致性問題:

    風格指南強調一致性。項目、模塊或函數保持一致都很重要。

    當遵循指南降低代碼一致性,可讀性的時候就不必強行修改。

  代碼布局:

    縮進四個空格代替tab

    行寬79個字符,文本長塊72個字符

  字符編碼總是用UTF-8

  導入模塊:

    導入時單行導入,開頭導入,

    順序為標準庫,本地庫,第三方庫,

    盡量使用絕對路徑,不用通配符導入,

  空格:

    括號內沒有空格,

    關鍵字參數和默認值參數的前后不要加空格

    逗號,分號,冒號前無空格

    運算符后有空格,

  不推薦復合語句,一句一行

  用英文寫注釋,及時更新注釋,少用行內注釋,文檔字符串:為所有公共模塊、函數、類和方法書寫

  命名:    

    最重要的原則

    用戶可見的API命名應遵循使用約定而不是實現。(不太明白)

    命名風格  

  • b(單個小寫字母)

  • B(單個大寫字母)

  • lowercase(小寫串)

  • lower_case_with_underscores(帶下劃線的小寫)

  • UPPERCASE(大寫串)

  • UPPER_CASE_WITH_UNDERSCORES(帶下劃線的大寫串)

  • CapitalizedWords(首字母大寫的單詞串或駝峰縮寫)注意: 使用大寫縮寫時,縮寫使用大寫字母更好。故 HTTPServerError 比?HttpServerError?更好。

  • mixedCase(混合大小寫,第一個單詞是小寫)

  • Capitalized_Words_With_Underscores(帶下劃線,首字母大寫,丑陋)

首尾有下劃線的情況:

  • _single_leading_underscore:(單前置下劃線): 弱內部使用標志。 例如"from M import " 不會導入以下劃線開頭的對象。

  • single_trailing_underscore_(單后置下劃線): 用于避免與 Python關鍵詞的沖突。 例如:Tkinter.Toplevel(master,?class_='ClassName')

  • __double_leading_underscore(雙前置下劃線): 當用于命名類屬性,會觸發名字重整。 (在類FooBar中,__boo變成 _FooBar__boo)。

  • __double_leading_and_trailing_underscore__(雙前后下劃線):用戶名字空間的魔法對象或屬性。例如:__init__ , __import__ or __file__,不要自己發明這樣的名字。

命名約定規范

  • 避免采用的名字

決不要用字符'l'(小寫字母el),'O'(大寫字母oh),或 'I'(大寫字母eye) 作為單個字符的變量名。一些字體中,這些字符不能與數字1和0區別。用'L' 代替'l'時。

  • 包和模塊名

模塊名要簡短,全部用小寫字母,可使用下劃線以提高可讀性。包名和模塊名類似,但不推薦使用下劃線。

模塊名對應到文件名,有些文件系統不區分大小寫且截短長名字,在 Unix上不是問題,但當把代碼遷移到 Mac、Windows 或 DOS 上時,就可能是個問題。當然隨著系統的演進,這個問題已經不是經常出現。

另外有些模塊底層用C或C++ 書寫,并有對應的高層Python模塊,C/C++模塊名有一個前置下劃線 (如:_socket)。

  • 類名

遵循CapWord。

接口需要文檔化并且可以調用時,可能使用函數的命名規則。

注意大部分內置的名字是單個單詞(或兩個),CapWord只適用于異常名稱和內置的常量。

  • 異常名

如果確實是錯誤,需要在類名添加后綴 "Error"。

  • 全局變量名

變量盡量只用于模塊內部,約定類似函數。

對設計為通過 "from M import " 來使用的模塊,應采用 __all__ 機制來防止導入全局變量;或者為全局變量加一個前置下劃線。

  • 函數名

函數名應該為小寫,必要時可用下劃線分隔單詞以增加可讀性。 mixedCase(混合大小寫)僅被允許用于兼容性考慮(如: threading.py)。

  • 函數和方法的參數

實例方法第一個參數是 'self'。

類方法第一個參數是 'cls'。

如果函數的參數名與保留關鍵字沖突,通常在參數名后加一個下劃線。

  • 方法名和實例變量

同函數命名規則。

非公開方法和實例變量增加一個前置下劃線。

為避免與子類命名沖突,采用兩個前置下劃線來觸發重整。類Foo屬性名為__a, 不能以 Foo.__a訪問。(執著的用戶還是可以通過Foo._Foo__a。) 通常雙前置下劃線僅被用來避免與基類的屬性發生命名沖突。

  • 常量

常量通常在模塊級定義,由大寫字母用下劃線分隔組成。比如括MAX_OVERFLOW和TOTAL。

  • 繼承設計

考慮類的方法和實例變量(統稱為屬性)是否公開。如果有疑問,選擇不公開;把其改為公開比把公開屬性改為非公開要容易。

公開屬性可供所有人使用,并通常向后兼容。非公開屬性不給第三方使用、可變甚至被移除。

這里不使用術語"private", Python中沒有屬性是真正私有的。

另一類屬性是子類API(在其他語言中通常稱為 "protected")。 一些類被設計為基類,可以擴展和修改。

謹記這些Python指南:

  1. 公開屬性應該沒有前導下劃線。

  2. 如果公開屬性名和保留關鍵字沖突,可以添加后置下劃線

  3. 簡單的公開數據屬性,最好只公開屬性名,沒有復雜的訪問/修改方法,python的Property提供了很好的封裝方法。 d.如果不希望子類使用的屬性,考慮用兩個前置下劃線(沒有后置下劃線)命名。

公共和內部接口

任何向后兼容的保證只適用于公共接口。

文檔化的接口通常是公共的,除非明說明是臨時的或為內部接口、其他所有接口默認是內部的。

為了更好地支持內省,模塊要在__all__屬性列出公共API。

內部接口要有前置下劃線。

如果命名空間(包、模塊或類)是內部的,里面的接口也是內部的。

導入名稱應視為實現細節。其他模塊不能間接訪名字,除非在模塊的API文檔中明確記載,如os.path中或包的__init__暴露了子模塊。

    

轉載于:https://www.cnblogs.com/xinghuaikang/p/8486493.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252296.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252296.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252296.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++中的類加多線程代碼修煉之二

背景:在上一篇文章中 寫到了我第一次使用C使用多個類多個線程進行編程,由于是第一接手“這么大一個工程”,所以還是要有個參照物的,由于我呢之前好幾年一直在看的一個C代碼工程就是ORB-SLAM了,這個工程使用C語言&#…

Primer c++ 第5版pdf

下載地址:網盤下載 內容簡介 這本久負盛名的 C經典教程,時隔八年之久,終迎來史無前例的重大升級。除令全球無數程序員從中受益,甚至為之迷醉的——C 大師 Stanley B. Lippman 的豐富實踐經驗,C標準委員會原負責…

eclispe修改project Explorer字體大小

切換到Eclipse目錄下: D:\JAVA\spring-tool-suite\sts-4.0.2.RELEASE\plugins\org.eclipse.ui.themes_1.2.200.v20180828-1350 找到下面的這個css文件 打開找到下面的位置在下面添加代碼:CTabFolder Tree{font-size: 15px;} 復制代碼重啟Eclipse,就可以看到效果 修改前 修改后…

3-4 第三天 Generator生成器

Generator是ES6里面的新增規范,ES6其實就是ES2015。ES5、ES6、ES7這些術語大家上網一查就都明白了。JavaScript是一個范程,就是我們說的JS。ES就是ECMA Script,是JavaScript標準的書面說法。ES4、5、6、7其實是JS這門語言發展中的不同的版本。…

神奇的事情--長見識了

背景:我的這個工程里有多個命名空間,之所以是這樣是因為,有一個跟蹤算法他本身有幾個namespace,然后我在他的基礎上進行整合代碼,將其作為一個功能接口,供其他函數調用,我在整合代碼時,將我新加…

箭頭函數的使用用法(一)

1 //箭頭函數的一個好處是簡化回調函數2 //箭頭函數沒有參數,就使用圓刮號代表參數部分;3 var f () >5;4 console.log(f());5 //兩個參數的情況,代碼塊只有一條語句,可以省略{}6 var f (a,b)> console.log(ab);7 f(1,3);8…

LinkedList中查詢(contains)和刪除(remove)源碼分析

一、contains源碼分析 本文分析雙向鏈表LinkedList的查詢操作源碼實現。jdk中源程序中,LinkedList的查詢操作,通過contains(Object o)函數實現。具體見下面兩部分程序:① public boolean contains(Object o) {return indexOf(o) ! -1; } ② p…

分塊入門

我貌似和所有的數據結構都有些誤會。。。。。。 在處理一些修改查詢問題的時候,我們可以利用分治的思想,比如說把一個線性的數據不斷分成一棵二叉樹,也就是我們所說的線段樹,這樣我們就可以在logn的時限里做到修改和查詢。同理我們…

開始使用gitlab

不得不說,我真不是一個合格的程序猿,工作馬上兩年了,github和gitlab用的一點也不熟練,每次興致來了就搞幾下,可是每次都淺嘗輒止,不求甚解,時間一長,上一次練習的步驟就都記不起來了…

Spark 2.2.0 文檔中文版 Collaborative Filtering 協同過濾 JAVA推薦系統

協同過濾常用于推薦系統,這項技術旨在填補 丟失的user-item關聯矩陣 的條目,spark.ml目前支持基于模型的協同過濾(用一些丟失條目的潛在因素在描述用戶和產品)。spark.ml使用ALS(交替最小二乘法)去學習這些…

淘寶top平臺調用接口響應時間優化

我的專欄地址:我的segmentfault,歡迎瀏覽 一、背景 調用top接口的響應時間長(160ms左右),超時和連接異常頻繁發生。導致消息組件消費工程的tps遇到瓶頸(單實例單消息隊列250tps),只能通過增加實…

樹上倍增一些理解和寫法

樹上倍增可以比較容易求得i節點的第k個父親,我們定義一個二維數組fa[i][j]代表節點i的第2^j個父親,關于有什么用我們等會再說,現在先學會怎么去求這個fa數組 我們可以通過從根節點開始一遍dfs求得所有fa數組,首先我們發現fa數組有…

圖像去畸變和添加畸變

背景:最近的項目中用到的圖像去畸變的知識,剛開始是直接調用opencv中提供的函數cv::initUndistortRectifyMap()和cv::remap()函數,實現圖像的全局去畸變,但是由于圖像的分辨率很高,再加上,實際過程中我們只…

win10上編譯libharu庫

背景: 最近的項目需要自動的生成pdf文件,我在網上查看相關的資料,發現目前比較流行的生成pdf文件的庫有兩個,一個是libpdf,另一個是libharu。libpdf個人使用時免費的但是商業使用就需要收費了,否則得到的p…

爬蟲——正則表達式re模塊

為什么要學習正則表達式 實際上爬蟲一共就四個主要步驟: 明確目標:需清楚目標網站爬:將所有的目標網站的內容全部爬下來取:在爬下來的網站內容中去掉對我們沒有用處的數據,只留取我們需要的數據處理數據:按…

深入Spring Boot:快速集成Dubbo + Hystrix

2019獨角獸企業重金招聘Python工程師標準>>> 背景 Hystrix 旨在通過控制那些訪問遠程系統、服務和第三方庫的節點,從而對延遲和故障提供更強大的容錯能力。Hystrix具備擁有回退機制和斷路器功能的線程和信號隔離,請求緩存和請求打包&#xff…

BZOJ2333 [SCOI2011]棘手的操作 【離線 + 線段樹】

題目 有N個節點,標號從1到N,這N個節點一開始相互不連通。第i個節點的初始權值為a[i],接下來有如下一些操作: U x y: 加一條邊,連接第x個節點和第y個節點 A1 x v: 將第x個節點的權值增加v A2 x v: 將第x個節點所在的連通…

opencv圖像仿射變換和普通旋轉

背景:今天需要對程序生成的圖像進行旋轉90度和下采樣操作,當然還有改變圖像類型的操作,就是把原來.png的圖像轉換為.jpg的圖像,主要是我目前使用libharu庫,無法成功從本地加載png圖像到pdf中去,不得不使用j…

討厭麻煩的ora 01722無效數字

webservice開發過程中,數據庫由原來的oracle改為現在的sql server。然后重新調試,結果報出ora 01722無效數字的錯誤。 由于連接oracle數據庫的時候并沒有問題,所以一開始我以為是數據庫不同,導致部分數據類型差異,&…

CSS樣式:覆蓋規則

規則一&#xff1a;由于繼承而發生樣式沖突時&#xff0c;最近祖先獲勝。 CSS的繼承機制使得元素可以從包含它的祖先元素中繼承樣式&#xff0c;考慮下面這種情況: <html><head><title>rule 1</title><style>body {color:black;}p {color:blue;}…