十大Python開發技巧

2020-11-25 51CTO

時不時地,當我了解Python的新功能時,或者我發現其他一些人不知道該功能時,我會記下它。

在過去的幾周中,我最近了解或實現了一些有趣的功能-Stack Overflow。

這裡有十個精巧的Python開發技巧,我敢肯定您從未見過。 快速瀏覽其中一些功能,以及每個功能的概要。

注意:代碼在此故事中顯示為圖像。 此外,您將在最後獲得GitHub Readme連結,以進一步進行實驗。

1. 如何在運行狀態下查看原始碼?

查看該函數的原始碼,我們通常使用IDE來完成。

例如,在PyCharm中,您可以使用Ctrl +滑鼠輸入功能的原始碼。

如果沒有IDE怎麼辦?

  • 當我們想使用一個函數時,我們如何知道該函數需要接收哪些參數?
  • 當我們在使用函數時遇到問題時,如何通過閱讀原始碼來解決問題?

目前,我們可以使用inspect而不是IDE來幫助您完成這些事情


inspect.getsource:返回對象原始碼的文本。


檢查模塊提供了幾個有用的功能,以幫助獲取有關活動對象的信息,例如模塊,類,方法,函數,回溯,框架對象和代碼對象。

此模塊提供的四種主要服務:

  • 類型檢查,
  • 獲取原始碼,
  • 檢查類和功能
  • 檢查解釋器堆棧。

2. 查看包路徑的最快方法

當使用import導入軟體包或模塊時,Python將在某些目錄中查找,並且這些目錄具有優先級順序,通常我們將使用sys.path進行查看。


有沒有更快的方法?

在這裡我想介紹一種比上面更方便的方法,可以解決一行命令:


從輸出中,您可以發現此列的路徑將比sys.path(包含用戶環境的目錄)更完整。

3. 將嵌套的循環寫為一行

我們經常使用以下嵌套的循環代碼:


這裡只有三個for循環,在實際編碼中,可能會有更多的層。

這樣的代碼可讀性很差,人們不想編寫它,並且有一種更好的編寫方法。

在這裡,我介紹一種常用的編寫方法,該方法使用itertools庫實現更優雅和可讀的代碼。


4. 如何使用列印輸出日誌

許多人喜歡使用列印來調試代碼並記錄程序的運行過程。

但是,列印只會將內容輸出到終端,而不能保留到日誌文件中,這不利於故障排除。

如果您熱衷於使用列印來調試代碼(儘管這不是最佳實踐),請記錄運行程序的過程,那麼下面描述的列印用法可能對您有用。

在Python 3中將其列印為函數,因為它可以接收更多參數,所以函數本身變得更強大。

代碼如下所示:


5. 如何快速計算功能運行時間

計算一個函數的運行時間,你可以這樣


您會看到編寫了幾行代碼來計算函數的運行時間。

有沒有一種方法可以更方便地計算運行時間? 是的,使用稱為timeit的內置模塊。

只需一行代碼即可使用


結果如下:

  1. 2222210.020059824 

6. 使用內置的緩存機制來提高效率

緩存是一種存儲定量數據以滿足後續採集需求的方法,旨在加快數據採集的速度。

數據生成過程可能需要諸如計算,正則化和遠程獲取之類的操作。 如果同一數據需要多次使用,則每次重新生成都將浪費時間。

因此,如果將通過諸如計算或遠程請求之類的操作獲得的數據進行緩存,則將加速後續的數據獲取需求。

為了達到這個要求,Python 3.2+為我們提供了一種易於實現的機制,而無需您編寫這樣的邏輯代碼。

該機制是在functool模塊的lru_cache裝飾器中實現的。


參數解釋:

  • maxsize:此函數調用最多可以緩存多少個結果,如果為None則沒有限制,設置為2的冪時,性能最佳
  • 類型:如果為True,則將分別緩存不同參數類型的調用。

例如:


輸出如下,您可以看到第二個調用不執行函數主體,而是直接將結果返回到緩存中:

  1. calculating: 1 + 233 
  2.  
  3. calculating: 2 + 35 

以下是經典的斐波那契數列,當您指定較大的n時,會有很多重複的計算


現在可以將第6點中介紹的timeit用於測試可以提高多少效率。

如果不使用lru_cache,則運行時間為31秒:


使用lru_cache後,運行速度過快,因此我將n的值從30調整為500,但是即使這樣,運行時間也只有0.0004秒。 速度的提高非常顯著。


7. 在程序退出之前執行代碼的提示

使用內置模塊atexit,您可以輕鬆註冊和退出功能。

無論您在哪裡導致程序崩潰,它都會執行您已註冊的功能。 例子如下:


結果如下:


如果clean()函數具有參數,則可以在不使用修飾符的情況下調用atexit.register(clean_1,參數1,參數2,參數3 =" xxx")。

也許您還有其他方法可以處理這種需求,但是與不使用atexit相比,它更優雅,更方便,並且易於擴展。

但是使用atexit仍然有一些限制,例如:

  • 如果程序被尚未處理的系統信號殺死,則註冊的功能將無法正常執行。
  • 如果發生嚴重的Python內部錯誤,則無法正常執行您註冊的函數。
  • 如果手動調用os._exit(),則無法正常執行註冊的功能。

8. 如何關閉異常關聯上下文?

當您處理異常時,由於處理不當或其他問題,當引發另一個異常時,拋出的異常還將攜帶原始異常信息。

再次閱讀它,您現在一定會理解。

像這樣。


您可以從輸出中看到兩條異常消息:


如果在異常處理程序或finally塊中引發異常,則默認情況下,異常機制將隱式工作,以將先前的異常附加為新異常的__context__屬性。

這是Python默認情況下啟用的自動關聯異常上下文。

如果要自己控制此上下文,則可以添加一個from關鍵字(from的限制是第二個表達式必須是另一個異常類或實例。)以指示哪個異常導致了您的新異常。


輸出如下


當然,您也可以使用with_traceback()方法設置異常的__context__屬性,這也可以在回溯中更好地顯示異常信息。


最後,是否要完全關閉這種自動關聯異常上下文的機制? 我們還能做什麼?

可以使用引發…從無,從下面的示例,沒有原始異常


9. 實施類似延遲的呼叫

Golang中有一種延遲通話的機制。 關鍵字為defer,如下所示


myfunc的調用將在函數返回之前完成,即使您在函數的第一行上編寫了myfunc的調用,這也是延遲的調用。 輸出如下,

  1. AB 

那麼Python中有這種機制嗎?

當然有,但是沒有Golang這麼簡單。

我們可以使用Python上下文管理器來達到這種效果


輸出如下

  1. AB 

10. 如何流式讀取大文件

使用with…open…可以從文件中讀取數據,這是所有Python開發人員都非常熟悉的操作。

但是,如果使用不當,也會造成很大的麻煩。

例如,當您使用讀取功能時,Python會將文件內容一次全部加載到內存中。 如果文件具有10 GB或更多,則計算機將消耗的內存非常大。

 

對於此問題,您可能會考慮使用readline作為生成器來逐行返回。


但是,如果此文件的內容在一行中,則每行10 GB,您仍將一次讀取所有內容。

最優雅的解決方案是使用read方法指定一次只讀取固定大小的內容。 例如,在下面的代碼中,一次僅返回8kb。


上面的代碼在功能上沒有問題,但是代碼看起來還是有點腫。

使用部分函數和迭代函數,您可以像這樣優化代碼


總結一下

  • 我們可以使用inspect在運行狀態下查看原始碼
  • 如果嵌套循環,可以使用itertools.product
  • 隨時間使用timeit模塊來計算功能或代碼段的運行時間
  • 使用functool.lru_cache可以加快代碼速度。 旨在加快數據採集速度
  • 使用atexit模塊註冊您的功能,以便在導致程序崩潰的任何地方,它將執行您已註冊的那些功能
  • 通過將大文件分成固定大小的塊來讀取它

【責任編輯:

趙寧寧

TEL:(010)68476606】

點讚 0

相關焦點

  • Python 三十大實踐、建議和技巧
    新一年,我們先為大家準備 30 個非常優秀的 Python 實踐技巧。希望這些訣竅能在實際工作中幫助大家,並且學到一些有用的知識。1、使用 python 3由於官方從2020年1月1日起就停止了對python2.7的更新支持,因此本教程的大部分例子都只能在python 3環境下運行。如果你仍然在使用2.7版本,請先升級到python 3。
  • windows上python開發環境的搭建
    對於程序開發而言,需要的就是一個良好的開發環境。對於C,C++, java等靜態性語言而言,需要通過IDE(集成開發環境)來便利開發過程;對於perl, python這種動態性語言而言,其開發環境的搭建就顯得簡單多了,只需要安裝好對應的解釋器,以及選擇一個順手的編輯器即可。
  • Python開發:Win10創建定時任務執行Python腳本
    2020-12-26 07:48:50 來源: 小小追 舉報   日常開發過程中
  • Python開發簡單爬蟲【學習資料總結】
    開發爬蟲步驟 python語言基礎:(帶你熟悉python語言的特性,學會使用python開發環境,使用python開發一些簡單的案例)
  • 成都學習Python開發哪家好
    如何選擇成都python培訓機構? python程式語言語法清晰、乾淨、易讀、易維護、代碼量小、可讀性強。當團隊合作開發時,閱讀別人的代碼將是非常迅速和高效的。通俗說來就是「寫起來快、看起來明白!」所以近年來,python開發非常流行。
  • 武漢Python Web全棧開發工程師修煉價格_web前端開發培訓哪家好...
    【課程介紹】課程以python語言為主導,進行web服務相關的全棧開發,包含後端伺服器開發,部署,監控;web前端開發,前後端不分離模板模式開發,前後端分離,單獨前端部署方案。【課程優勢】 python全棧開發涉及的知識點極多,不同的項目,不同的公司涉及都不相同,本課程主要根據講師在工作中總結的經驗,吸取共同點,著重講解使用率更高的知識點進行教學,並講解當下更主流的前後端框架,如 flask,如 vue Web 全棧開發是很多技能的一個公共點,如爬蟲(通過爬取前端頁面內容或js內容,對於http請求,js是要有所了解的),自動化運維平臺(將人工操作通過
  • 常用的十大 python 圖像處理工具
    然而, 隨著2009年的最後一次發布,它的開發停滯不前。但幸運的是還有有Pillow,一個PIL積極開發的且更容易安裝的分支,它能運行在所有主要的作業系統,並支持Python3。這個庫包含了基本的圖像處理功能,包括點運算、使用一組內置卷積核的濾波和色彩空間的轉換。
  • Python2 已終結,入手Python 3,你需要這30個技巧
    機器之心選自medium作者:Erik-Jan van Baaren機器之心編譯參與:王子嘉、一鳴Python2 在今年和我們說拜拜了,Python3 有哪些有趣而又實用的技巧呢
  • python開發爬蟲有門檻嗎?
    如果你不是科班出身,沒有開發經驗,初次接觸開發爬蟲這檔子事兒,相信這篇文章能幫到你。python開發爬蟲肯定是有門檻的。儘管python很簡單,上手不難,但是開發起來你會發現,開發爬蟲不只是單單會python就可以了,你還得需要下列這些技能。
  • Python,爬蟲開發的不二選擇
    (1)用途:Android & IOS 應用開發,視頻遊戲開發,桌面GUIs(即圖形用戶頁面),軟體開發,架構等。(2)優勢:面向對象開源、跨平臺、市場需求旺盛;Android開發的基石, 是Web開發的主流語言;(3)缺點:佔用大量的內存,啟動時間較長,不直接支持硬體級別的處理2)Pythonpython是動態形的靈活的解釋性語言,從軟體開發到Web開發,Python都有在被使用。因為它是解釋性腳本語言,適合輕量級開發。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    總目錄 零基礎全能篇(4套課程) 實用編程技巧進價(1套課程) 數據分析與挖掘(8套課程) 辦公自動化(3套課程) 機器學習與人工智慧(7套課程) 開發實戰篇(4套課程) 量化投資(2套課程) 網絡爬蟲(6套課程) 資料庫操作(1套課程) python高級編程
  • Python十大工具,讓圖像簡潔直觀有魅力!
    所幸還有Pillow這個積極開發的PIL分支,而且它安裝起來更容易,還可以在所有主作業系統上運行,並支持Python 3。該庫包含點操作、使用一組內置卷積內核進行圖像過濾以及顏色空間轉換這些基本的圖像處理功能。
  • 廣州Python測試培訓
    你可選擇的崗位:Python全棧開發、自動化開發、Linux運維、Python爬蟲開發、金融自動化交易、前端開發等。HTTP協議、JSCON、WEB前端開發技術、 HTML5、CSS、 Javascript、 JQuery庫等等,課程採用面授的形式進行,不僅有Python開發必備理論知識的傳道授業,還有針對學員實操技術提升的實戰項目,真實採用企業開發案例 ,應用在教學中,學生不僅僅要想清楚開發的理論依據,更重要的是把心中隱約的想法經過雙手,變成現實。
  • 十大乳膠枕頭品牌排名 乳膠枕頭選購技巧
    度睡眠被稱作是「黃金睡眠」,深度睡眠是孩子身體長高智力開發、年輕人精力充沛、中年人身體強健、老年人健康長壽的保證,進入深度睡眠狀態能在短時間內迅速恢復精力。而枕頭是睡眠的保證,今天就來看看十大乳膠枕頭品牌排名以及乳膠枕頭選購技巧。
  • Python 3.8.0來了!
    了解詳情:https://www.python.org/dev/peps/pep-0572 (由 Morehouse 在 bpo-35224 中貢獻。) 具有外部數據緩衝區的 pickle 協議 5 當使用 pickle 在 Python 進程間傳輸大量數據以充分發揮多核或多機處理的優勢時,非常重要一點是通過減少內存拷貝來優化傳輸效率,並可能應用一些定製技巧例如針對特定數據的壓縮。
  • Python學習第112課——numpy中數組查找元素和改變元素的小技巧
    【每天幾分鐘,從零入門python編程的世界!】上節我們學習了如何利用index找到ndarray數組中的一些元素,並把找到的元素生成一個新的ndarray。代碼如下:現在我們學習幾個用index找到ndarray中元素的小技巧。
  • python編程30個常用技巧
    打開APP python編程30個常用技巧 深度學習這件小事 發表於 2020-12-24 15:07:51 1、冒泡排序
  • 數據分析從業者必看,10 個加速 python 數據分析的簡單的小技巧
    數據科學愛好者 Parul Pandey 在近日發表了一篇博文,分享了在數據科學中非常實用的 10 個小技巧。雷鋒網 AI 科技評論將他的文章編譯整理如下。有時候,一點小小的黑客行為可以節省時間,挽救生命。一個小小的快捷方式或附加組件有時會被證明是天賜之物,並且可以真正提高生產力。所以,下面是我最喜歡的一些技巧,我以本文的形式一起使用和編譯它們。
  • 初識python
    2,python歷史。宏觀上:python2 與 python3 區別:python2 源碼不標準,混亂,重複代碼太多,python3 統一 標準,去除重複代碼。3,python的環境。編譯型:一次性將所有程序編譯成二進位文件。缺點:開發效率低,不能跨平臺。優點:運行速度快。
  • 入門Python,這些JupyterNotebook技巧就是你必須學的
    此系列文章收錄在公眾號(建議按順序閱讀本系列文章) : 數據大宇宙 > Python > 工具轉發本文並私信我"python",即可獲得Python資料以及更多系列文章(持續更新的)Python數據人你竟然不會用JupyterNotebook!