python小技巧

来源:https://www.cnblogs.com/ITXiaoAng/archive/2019/10/13/11669033.html
-Advertisement-
Play Games

[TOC]   在python中,實際書寫代碼還有很多需要註意的東西,有時候會讓代碼的執行效率提高,下麵就讓我們來學習PEP 8風格以及Python編程慣例的一些知識吧。 一:PEP 8風格   PEP是Python Enhancement Proposal的 ...


目錄

  在python中,實際書寫代碼還有很多需要註意的東西,有時候會讓代碼的執行效率提高,下麵就讓我們來學習PEP 8風格以及Python編程慣例的一些知識吧。


一:PEP 8風格

  PEP是Python Enhancement Proposal的縮寫,通常翻譯為“Python增強提案”。其中的第8號增強提案(PEP 8)是針對Python語言編訂的代碼風格指南。


  在實際開發中,採用一致的風格書寫出可讀性強的代碼是每個專業的程式員應該做到的事情,也是每個公司的編程規範中會提出的要求,這些在多人協作開發一個項目(團隊開發)的時候顯得尤為重要。

  官方鏈接:https://www.python.org/dev/peps/pep-0008/


  下麵只介紹關鍵部分:

   1.空格的使用

  (1)使用空格來表示縮進而不要用製表符(Tab):這是由於。但是如果喜歡用Tab的話,就需要把使用的編輯器的Tab鍵設定為四個空格。

  (2)每行的字元數不要超過79個字元。

  (3)如果表達式因太長而占據了多行,除了首行之外的其餘各行都應該在正常的縮進寬度上再加上4個空格。

  (4)函數和類的定義,代碼前後都要用兩個空行進行分隔。

  (5)在同一個類中,各個方法之間應該用一個空行進行分隔。

  (6)二元運算符的左右兩側應該保留一個空格,而且只要一個空格就好。

   2.標識符的命名

  PEP 8倡導用不同的命名風格來命名Python中不同的標識符,以便在閱讀代碼時能夠通過標識符的名稱來確定該標識符在Python中扮演了怎樣的角色。

  (1)變數、函數和屬性應該使用小寫字母來拼寫,如果有多個單詞就使用下劃線進行連接。

  (2)類中受保護的實例屬性,應該以一個下劃線開頭。

  (3)類中私有的實例屬性,應該以兩個下劃線開頭。

  (4)類和異常的命名,應該每個單詞首字母大寫。

  (5)模塊級別的常量,應該採用全大寫字母,如果有多個單詞就用下劃線進行連接。

  (6)類的實例方法,應該把第一個參數命名為self以表示對象自身。

  (7)類的類方法,應該把第一個參數命名為cls以表示該類自身。

   3.表達式和語句

  (1)採用內聯形式的否定詞,而不要把否定詞放在整個表達式的前面。例如if a is not b就比if not a is b更容易讓人理解。

  (2)不要用檢查長度的方式來判斷字元串、列表等是否為None或者沒有元素,應該用 if not x 這樣的寫法來檢查它。

  (3)就算if分支、for迴圈、except異常捕獲等中只有一行代碼,也不要將代碼和if、for、except等寫在一起,分開寫才會讓代碼更清晰。

  (4)import語句總是放在文件開頭的地方。

  (5)引入模塊的時候,from math import sqrt比import math更好。

  (6)如果有多個import語句,應該將其分為三部分,從上到下分別是Python標準模塊、第三方模塊和自定義模塊,每個部分內部應該按照模塊名稱的字母表順序來排列。


二:Python編程慣例

  由於Python跟其他很多編程語言在語法和使用上還是有比較顯著的差別,因此作為一個Python開發者如果不能掌握一些慣例,就無法寫出"Pythonic"(python風格,pythonic code,就是說你寫的代碼要帶有濃厚的python規範和python風格)的高效代碼。


1.讓代碼既可以被導入又可以被執行。

if __name__ == '__main__':

2.用下麵的方式判斷邏輯“真”或“假”。

if x:
if not x:

# 實例
name = 'jackfrued'
fruits = ['apple', 'orange', 'grape']
owners = {'1001': 'a', '1002': 'b'}
# 好的代碼
if name and fruits and owners:
    print('I love fruits!')
# 不好的代碼
if name != '' and len(fruits) > 0 and owners != {}:
    print('I love fruits!')

3.善於使用in運算符。

if x in items: # 包含
for x in items: # 迭代

# 實例
name = 'Hao LUO'
# 好的代碼
if 'L' in name:
    print('The name has an L in it.')
# 不好的代碼
if name.find('L') != -1:
    print('This name has an L in it!')

4.不使用臨時變數交換兩個值。

a, b = b, a

5.用序列構建字元串。

chars = ['j', 'a', 'c', 'k', 'f', 'r', 'u', 'e', 'd']
# 好的代碼
name = ''.join(chars)
print(name)  # jackfrued
# 不好的代碼
name = ''
for char in chars:
    name += char
print(name)  # jackfrued

6.EAFP優於LBYL。

d = {'x': '5'}
# 好的代碼
try:
    value = int(d['x'])
    print(value)
except (KeyError, TypeError, ValueError):
    value = None
# 不好的代碼
d = {'x': '5'}
if 'x' in d and isinstance(d['x'], str) \
        and d['x'].isdigit():
    value = int(d['x'])
    print(value)
else:
    value = None

7.使用enumerate進行迭代。

fruits = ['orange', 'grape', 'pitaya', 'blueberry']
# 好的代碼
for index, fruit in enumerate(fruits):
    print(index, ':', fruit)
# 不好的代碼
index = 0
for fruit in fruits:
    print(index, ':', fruit)
    index += 1

8.用生成式生成列表。

data = [7, 20, 3, 15, 11]
# 好的代碼
result = [num * 3 for num in data if num > 10]
print(result)
# 不好的代碼
result = []
for i in data:
    if i > 10:
        result.append(i * 3)
print(result) 

9.用zip組合鍵和值來創建字典。

keys = ['1001', '1002', '1003']
values = ['a', 'b', 'c']
# 好的代碼
d = dict(zip(keys, values))
print(d)
# 不好的代碼
d = {}
for i, key in enumerate(keys):
    d[key] = values[i]
print(d)

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

-Advertisement-
Play Games
更多相關文章
  • "洛谷題目頁面傳送門" & "CodeForces題目頁面傳送門" 給定一棵樹$T=(V,E),|V|=2^n 2,|E|=2^n 3$,輸出所有的$x$,使得存在一棵滿二叉樹$T'$,將$T'$中節點$x$的一個兒子刪除並把這個兒子的所有兒子接到$x$下後等於$T$。升序輸出。 $n\le17$。 ...
  • 預設下載安裝完的vscode並不能準確提示和檢測PHP的語法錯誤,需要手動指定一下本機的PHP程式路徑。按下麵的操作配置完後就能在文件保存的時候檢測語法有無錯誤。打開文件->首選項->setting,把PHP的執行路徑填進去,前提是本機已經安裝了PHP程式{ "workbench.sideBar.l ...
  • "洛谷題目頁面傳送門" & "CodeForces題目頁面傳送門" 給定一個$n$個單詞的文本,第$i$個單詞的長度為$len_i$,要求截取文本的一段(單詞必須取整的),分若幹行放,同行詞語用空格分隔,使得每行的長度不超過$m$,最多放$s$行。求截取的單詞數最多的截法。 $n\in[1,10^6 ...
  • 關於spring bean的生命周期,是深入學習spring的基礎,也是難點,本篇文章將採用代碼+圖文結論的方式來闡述spring bean的生命周期, 本篇文章將闡述清楚下圖。 一 項目結構及源碼 1.程式目錄結構 2.applicationContext.xml 3.UserDao.java 二 ...
  • django預設是有一個admin的後臺管理模塊,但是醜,功能也不齊全,但是大神給我們已經集成好了xadmin後臺,我們拿來用即可,但是呢,django已經升級到2.1版本了,xadmin貌似跟不上節奏,那麼在集成過程中咱就一步一步填坑吧,這也是一種學習的過程,遇到錯誤,找到錯誤的地方,看看djan ...
  • 下列代碼都是以自己的項目實例講述的,相關的文本內容很少,主要說明全在代碼註釋中 自製圖形驗證碼 這裡所說的圖形驗證碼都是自製的圖形,通過畫布、畫筆、畫筆字體的顏色繪製而成的。將驗證碼封裝成一個類比較好管理,代碼里有絕對詳細的註釋,當然大家可以直接複製。 裡面涉及的字體都是從系統電腦上自帶的,大家直接 ...
  • 一、面向對象簡介 1、面向對象不是所有的情況都適用2、面向對象編程 a.定義類 class 類名: def 方法1(self, 參數名): 方法體 b.根據類創建對象,使用對象去執行類中的方法 obj = 類名() obj.方法名3、self,形參,python內部傳遞 4、函數式編程與面向對象式編 ...
  • 有些小伙伴可能不知道,亞馬遜AWS對新用戶有個免費體驗一年的活動。如果希望體驗免費亞馬遜AWS雲伺服器產品,或者看看他們後臺面板長什麼樣,體驗產品的速度和性能,又或者準備搭建一個免費梯子,可以 註冊玩玩。 很簡單,全程基本都是中文,不用擔心看不懂英文。 我是2018年6月30號註冊的賬號,在EC2面 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...