Python學習筆記:PEP8常用編程規範

来源:https://www.cnblogs.com/guyuyun/archive/2019/01/15/10274781.html
-Advertisement-
Play Games

PEP8編碼規範是一種非常優秀的編碼規範,也得到了Python程式員的普遍認可,如果實踐中或者項目中沒有統一的編碼規範,建議儘量遵循PEP8編碼規範,當然如果項目中已經有了自身的編碼規範,應當優先遵循自身的編碼規範,哪怕原先的代碼風格在你看來很糟糕,也要儘量與源代碼風格保持一致。原文地址:https ...


PEP8編碼規範是一種非常優秀的編碼規範,也得到了Python程式員的普遍認可,如果實踐中或者項目中沒有統一的編碼規範,建議儘量遵循PEP8編碼規範,當然如果項目中已經有了自身的編碼規範,應當優先遵循自身的編碼規範,哪怕原先的代碼風格在你看來很糟糕,也要儘量與源代碼風格保持一致。
原文地址:https://blog.csdn.net/ratsniper/article/details/78954852,原文很詳細,有代碼示例和更多講解,如果有足夠時間,建議閱讀原文,這篇筆記只是根據此文來整理了一些常用的點。

一、縮進和對齊
1.語法縮進:語法上的縮進使用4個空格(參數對齊等不一定要用4個空格),不要混用製表符與空格,Python2程式在命令行運行時,使用-t可以發出製表符與空格混用的警告,而使用-tt就會使這些警告變成錯誤提示了
2.行寬:代碼行寬限制在79個字元(也可以是99個字元),文檔和註釋限制在72個字元
3.對齊:當圓括弧、方括弧和花括弧中的元素需要換行時,元素應該垂直對齊,而且如果下一條語句需要縮進時,比如if的條件語句和要執行的代碼塊,這些換行的元素應該使用更多的縮進來區分下麵的縮進
4.換行:代碼換行時應該優先使用圓括弧、方括弧和花括弧中的隱式續行,視情況使用反斜杠\來進行換行
5.二元運算符:在二元雲演算法的換行時推薦以二元運算符作為新行的開始
6.多條語句同行:即使是簡單的語句,即使可以使用分號,但是不推薦寫在同一行,比如再簡單的if/for/while語句也應該分行寫

 

二、空行
1.頂級定義:頂級函數和類定義的前後使用兩個空行隔開
2.類方法:類中方法的定義使用一個空行隔開
3.邏輯分段:函數中的功能組和邏輯段使用空行來隔開(視情況靈活運用)

 

三、import語句
1.import *和from xxx import *:這種通配符星號的用法應該儘量避免使用
2.import xxx:這種語句有多個時,應該分開導入,不推薦使用import xxx, yyy
3.from xxx import x, xx:這種形式可以一次導入多個而不用分行
4.普通導入:導入應該在文檔字元串和註釋之後,在全局變數和常量定義之前
5.導入順序:導入順序應該是標準庫,三方庫,以及本地模塊,且需要加空行分隔
6.導入路徑:導入應該儘量使用絕對路徑,或使用顯式的相對路徑也是可行的(如:from . import xxx),儘量避免隱式的相對路徑
7.雙下劃線變數導入:在像__version__、__author__等模塊級變數的導入應該在文檔和註釋之後,在import語句之前

 

四、空格
1.括弧等之後的空格:避免緊跟在括弧、中括弧和大括弧之後的空格,例如:func( list_[ 1 ], { 'age': 18 })。應該省去不必要的空格func(list_[1], {'age': 18})
2.逗號等之前的空格:避免緊跟在逗號、分號和冒號之前的空格,例如:a , b = b , a。應該省去不必要的空格a, b = b, a
3.切片中的空格:切片的冒號左右兩邊應該有相同的空格,切片的下標如果是數字或變數,建議冒號兩邊不用空格,如果下標是多個變數的表達式或者函數表達式,則建議冒號兩邊使用一個空格分隔
4.行尾的空格:避免在行尾添加空格,比如在換行符反斜杠\後有空格的話,那這個反斜杠\就不是換行符了,因為行尾是空格而不是反斜杠\
5.二元運算符:除了函數傳參和函數指定預設值等特殊情況外,應該總是在二元運算符的兩邊添加一個空格,如果一個表達式有多個二元運算符(如:+-*/),那麼高優先順序的二元運算符兩邊不用空格,低優先順序兩邊添加一個空格,如:x = a*b + c/d

 

五、註釋
1.修改註釋:修改代碼時一定修改對應的註釋,千萬不要留下與代碼不對應的,甚至是錯誤的註釋,視情況甚至可以刪掉註釋也不留錯誤的註釋
2.行註釋:使用一個#和一個空格開始,並且與註釋的代碼具有相同縮進,如果需要使用行註釋寫多段意思的註釋,可以使用一個空行註釋(即這一行只有一個#)來分隔不同意思的段落
3.代碼行之後的註釋:應該與前面的代碼間隔至少兩個空格,然後也是以使用一個#和一個空格開始,但是這種註釋應該儘量少用,不必要的話就不用
4.文檔註釋:應該為所有公共的模塊、函數、類和方法編寫文檔註釋,一般使用三個雙引號寫文檔註釋,且如果是單行註釋,則結尾的三引號應該與註釋內容同行,如果是多行註釋,則結尾三引號應該單獨一行

 

六、命名
1.舊代碼:如果原有的代碼與命名規範不一樣,應該與原有代碼保持一致
2.API:暴露的API或者給別人使用的API應該以使用場景來命名,而不是實現原理命名
3.首字母大寫加下劃線:這種命名風格不可取,比如Capitalized_Words_With_Underscores
4.單下劃線開頭:這種命名為弱“內部使用”指示器,即模塊內非公有(“protected”),比如在使用from xxx import *語句時是是不會導入單下劃線開頭的對象的
5.單下劃線結尾:這種命名風格是為了避免與Python內部關鍵字衝突的一種約定
6.雙下劃線開頭:當在類中以雙下劃線開頭定義時,調用它的時候會在前面加上“_ClassName”,如調用類A中的屬性__a時,__a就變成了_A__a,這樣子類就不可以隨便調用這個屬性了,可以認為它是“私有”的,但Python中沒有“私有”的說法,因為依然可以通過A._A__a去訪問屬性
7.雙下劃線開頭和結尾:為模塊和系統級變數,比如__name__、__init__等,我們自己應該永遠避免使用這種命名風格
8.單字元變數:永遠要使用O(大寫的O)、l(小寫的L)和I(大寫的I),因為有些字體中無法區分它們是數字0和1還是英文字母L和O
9.包名和模板名:使用簡短全小寫的名稱,包名不建議使用下劃線,模塊名為了提高可讀性可以使用下劃線
10.c/c++擴展模塊:使用c/c++編寫的擴展模塊需要在模塊名稱加一個下劃線首碼,如:_socket
11.類名:首字母大寫
12.異常名:異常一般也是類,所以首字母也是大寫,如果異常確實是一個錯誤,那需要在類名後加上“Error”尾碼
13.函數名:全小寫,為了提高可讀性也可以使用下劃線,大小寫混合的情況只限於為了與原來的代碼相容的情況
14.全局變數:只在模塊內使用的全局變數和普通變數一樣定義,但是需要註意使用“from xxx import *”的xxx模塊中的全局變數應該使用單下劃線開頭防止內部介面或變數的對外暴露
15.實例變數:非公有方法和實例變數使用單下劃線開頭(“protected”),雙下劃線開頭會觸發Python的命名轉換規則(在前面加上“_ClassName”)以避免和子類命名的衝突
16.常量:常量通常是模塊級的,使用全大寫和下劃線配合

 

七、編程建議
1.字元(串)連接:儘量避免使用如str1 += str2或str1 = str1 + str2的方式連接字元(串),建議使用字元串方法join()方法來連接字元(串)
2.單例對象判斷:在於如None這樣的單例對象進行判斷時,應該使用is None或者is not None來進行判斷
3.自定義異常:自定義異常應該繼承自Exception,而不是BaseException
4.try/except:在try中只填充可能出錯的代碼,不要一股腦把全部代碼放進去
5.return語句:除非函數中沒有return語句,如果函數中有return語句,那麼在其他可能結束的情況也顯示的使用return語句,如果其他情況確實沒有值要返回(如運行到了函數結束處,卻不需要返回任何值),也要使用return None顯示指明
6.startswith/endswith:判斷字元串開頭首碼或結尾尾碼時,使用字元串本身的startswith/endswith,不用字元串的切割來進行判斷
7.對象類型的比較:對象類型的比較使用isinstance,而不是type
8.“空”值判斷:對於空字元串、空列表、空字典等的判斷,直接使用本身來進行布爾值判斷,如空字元串使用if str1: pass,而不是if str1 == '': pass

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、引言 電商項目中一個常見場景:提交訂單操作,提交訂單後有很多後續動作,例如:檢查訂單, 創建訂單, 減庫存,創建支付鏈接等等,這些子類的內部操作都很複雜。如果我們的客戶端程式要直接跟這些內容子系統進行耦合,那麼客戶端就得隨著子系統的改動而改動。提交訂單操作在一個電商系統中很多地方都會出現,如果每 ...
  • 以下為DI控制反轉個人理解煩請各位大牛指教~ 編寫程式時我們應當遵循抵耦合高內聚的原則(各個功能模塊互不依賴). 我們可以利用面向對象裡面介面的特性來進行DI控制反轉,讓功能模塊全部依賴介面,而不依賴具體的實現類,當程式跑起來以後通過註入的方式註入具體的實現類如以下代碼: 這樣,購物車類就實現了松耦 ...
  • 內容過程,把做工程過程較好的內容片段備份一次,如下的內容是關於 JavaBean到JSon格式的轉換例子的內容,應該對各朋友有一些用處。 User u = new User(); u.setId(1); u.setName("lizhi"); u.setAge(24); u.setHeigh("17 ...
  • 本篇主要介紹的是SpringCloud中的服務消費者(Feign)和負載均衡(Ribbon)功能的實現以及使用Feign結合Ribbon實現負載均衡。 ...
  • 1、習題 4: 更多的變數和列印 學習目標: 瞭解用戶輸入方法,明白pthon2和Python3之間的用戶輸入的區別。瞭解格式化字元串(format string)的概念,學會如何創建包含變數內容的字元串。使用專門的格式和語法把變數的內容放到字元串里,然後進行格式化的列印輸出。 1.1、用戶輸入 在 ...
  • 一、概述 只要用框架開發java,一定躲不過spring,Spring是一個輕量級的Java開源框架,存在的目的是用於構建輕量級的J2EE應用。Spring的核心是控制反轉(IOC)和麵向切麵編程(AOP)。spring有如下特點: 輕量級:應用大小和應用開支,包括應用方式 DI/IoC:提供松耦合 ...
  • Spring Security(三) 個性化用戶認證流程 自定義登錄頁面 在配置類中指定登錄頁面和接收登錄的 url 在項目中新建登錄頁面 啟動項目時再訪問 Security 就會跳轉到你自已定義的登陸頁面讓你登錄。 深入定義(判斷是PC端還是移動端,PC端跳轉頁面,移動端響應 json) 創建一個 ...
  • 今天在家裡的Linux系統上,試著搭建Eclipse C/C++開發環境,最後終獲成功。下麵貼上兩篇對搭建過程很有幫助的文章 用 Eclipse 平臺進行 C/C++ 開發 https://www.ibm.com/developerworks/cn/linux/opensource/os-ecc/ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...