日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

為什么 Python 代碼在函數中運行得更快?

來源: 責編: 時間:2023-09-20 21:54:44 382觀看
導讀要理解為什么 Python 代碼在函數中運行得更快,我們需要首先了解 Python 是如何執行代碼的我們知道,python 是一種解釋型語言,它會逐行讀取并執行代碼當運行一個 python 程序的時候,首先將代碼編譯成字節碼(一種更接近機器

要理解為什么 Python 代碼在函數中運行得更快,我們需要首先了解 Python 是如何執行代碼的ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

我們知道,python 是一種解釋型語言,它會逐行讀取并執行代碼ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

當運行一個 python 程序的時候,首先將代碼編譯成字節碼(一種更接近機器碼的中間語言)然后 python 解釋器執行字節碼ovQ28資訊網——每日最新資訊28at.com

圖片圖片ovQ28資訊網——每日最新資訊28at.com

圖片圖片ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

由上所示,python 中的 dis 模塊將函數 hello_world 分解為字節碼ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

需要注意的是,python 解釋器是一個執行字節碼的虛擬機,默認的 python 解釋器是用 C 編寫的,即 CPythonovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

還有其他的 python 解釋器如 Jython(用 Java 編寫),IronPython(用于 )和PyPy(用 Python 和 C 編寫)ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

為什么 python 代碼在函數中運行得更快

ovQ28資訊網——每日最新資訊28at.com

我們來編寫一個簡單的例子:定義一個函數 my_function,函數內部包含一個 for 循環ovQ28資訊網——每日最新資訊28at.com

圖片圖片ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

編譯該函數的時候,字節碼可能如下所示ovQ28資訊網——每日最新資訊28at.com

圖片圖片ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

這里的關鍵指令是 STORE_FAST ,用于存儲循環變量 i ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

現在我們把這個 for 循環放在 python 腳本的頂層(全局范圍內),然后再來看一下字節碼ovQ28資訊網——每日最新資訊28at.com

圖片圖片ovQ28資訊網——每日最新資訊28at.com

圖片圖片ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

可以看到關鍵指令變成了 STORE_NAME,而不是 STORE_FAST ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

字節碼 STORE_FAST比 STORE_NAME 快,因為在函數中,局部變量存儲在固定長度的數組中,而不是存儲在字典中。這個數組可以通過索引直接訪問,使得變量檢索非???span style="display:none">ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

基本上,它只是一個指向列表的指針,并增加了 PyObject 的引用計數,這兩個都是高效的操作ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

另一方面,全局變量存儲在一個字典。當訪問全局變量時,Python 必須執行哈希表查找,這涉及計算哈希值,然后檢索與之關聯的值ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

雖然經過優化,但仍然比基于索引的查找慢ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

基準測試驗證

ovQ28資訊網——每日最新資訊28at.com

我們知道在 Python 中,代碼執行的速度取決于代碼執行的位置——在函數中還是在全局作用域中ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

讓我們用一個簡單的基準測試的例子來比較一下ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

首先定義一個求階乘的函數ovQ28資訊網——每日最新資訊28at.com

圖片圖片ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

然后在全局范圍內執行相同的代碼ovQ28資訊網——每日最新資訊28at.com

圖片圖片ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

為了對這兩段代碼進行基準測試,我們可以在 Python 中使用 timeit 模塊,它提供了一種簡單的方法來對少量 Python 代碼進行計時ovQ28資訊網——每日最新資訊28at.com

圖片圖片ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

可以看到,函數代碼的執行速度比全局作用域代碼要快ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

需要注意的是,這兩段代碼最好不要放在同一腳本中,要分開單獨運行ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

這是因為 benchmark() 函數在執行時間上增加了一些開銷,并且全局代碼在內部進行了優化ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

cProfile 分析ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

python 提供了一個  cProfile 內置模塊ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

讓我們用它來分析一個新例子:在局部和全局范圍內計算平方和ovQ28資訊網——每日最新資訊28at.com

圖片圖片ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

上面的例子中,可以認為sum_of_squares_g() 函數是全局的,因為它使用了兩個全局變量, i 和 totalovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

從性能分析結果中,可以看到函數代碼在執行時間方面比全局更有效ovQ28資訊網——每日最新資訊28at.com

圖片圖片ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

如何優化 python 函數的性能

ovQ28資訊網——每日最新資訊28at.com

前面我們知道,Python 代碼在函數中運行往往比在全局范圍內運行要快得多ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

如果想要進一步提高 python 函數代碼效率,不妨考慮一下使用局部變量而不是全局變量ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

另一種方法是盡可能使用內置函數和庫。Python 的內置函數是用 C 實現的,比 Python 快得多ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

比如 NumPy 和 Pandas,也是用 C 或 C++ 實現的,它們比實現同樣功能的 Python 代碼速度更快ovQ28資訊網——每日最新資訊28at.com

ovQ28資訊網——每日最新資訊28at.com

又比如同樣是實現數字求和的功能,python 內置的 sum 函數要比你自己編寫函數速度更快ovQ28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-10609-0.html為什么 Python 代碼在函數中運行得更快?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 使用二進制字面量在現代C++中的應用

下一篇: 數據組合利器:從入門到精通Python中的zip()函數應用

標簽:
  • 熱門焦點
  • 6月安卓手機好評榜:魅族20 Pro蟬聯冠軍

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年6月1日至6月30日,僅限國內市場。第一名:魅族20 Pro好評率:95%5月份的時候魅族20 Pro就是
  • JavaScript 混淆及反混淆代碼工具

    介紹在我們開始學習反混淆之前,我們首先要了解一下代碼混淆。如果不了解代碼是如何混淆的,我們可能無法成功對代碼進行反混淆,尤其是使用自定義混淆器對其進行混淆時。什么是混
  • 掘力計劃第 20 期:Flutter 混合開發的混亂之治

    在掘力計劃系列活動第20場,《Flutter 開發實戰詳解》作者,掘金優秀作者,Github GSY 系列目負責人戀貓的小郭分享了Flutter 混合開發的混亂之治。Flutter 基于自研的 Skia 引擎
  • 如何通過Python線程池實現異步編程?

    線程池的概念和基本原理線程池是一種并發處理機制,它可以在程序啟動時創建一組線程,并將它們置于等待任務的狀態。當任務到達時,線程池中的某個線程會被喚醒并執行任務,執行完任
  • 騰訊蓋樓,字節拆墻

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之“想重溫暴刷深淵、30+技能搭配暴搓到爽的游戲體驗嗎?一起上晶核,即刻暴打!”曾憑借直播騰訊旗下代理格斗游戲《DNF》一
  • 余承東:AI大模型技術的發展將會帶來下一代智能終端操作系統的智慧體驗

    8月4日消息,2023年華為開發者大會(HDC.Together)今天正式開幕,華為發布HarmonyOS 4、全新升級的鴻蒙開發套件、HarmonyOS Next開發者預覽版本等一系列
  • 華為Mate60標準版細節曝光:經典星環相機模組回歸

    這段時間以來,關于華為新旗艦的爆料日漸密集。據此前多方爆料,今年華為將開始恢復一年雙旗艦戰略,除上半年推出的P60系列外,往年下半年的Mate系列也將
  • DRAM存儲器10月價格下跌,NAND閃存本月價格與上月持平

    10月30日,據韓國媒體消息,自今年年初以來一直在上漲的 DRAM 存儲器的交易價格僅在本月就下跌了近 10%,此次是全年首次降價,而NAND 閃存本月價格與上月持平。市
  • SN570 NVMe SSD固態硬盤 價格與性能兼具

    SN570 NVMe SSD固態硬盤是西部數據發布的最新一代WD Blue系列的固態硬盤,不僅閃存技術更為精進,性能也得到了進一步的躍升。WD Blue SN570 NVMe SSD的包裝外
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
欧美sm视频| 久久精品人人做人人爽电影蜜月| 亚洲精品免费在线| 一本久道久久综合婷婷鲸鱼| 亚洲一级影院| 久久精品导航| 欧美黄色成人网| 国产精品免费观看视频| 国产一区二区成人| 亚洲精品色图| 午夜欧美大片免费观看| 久久一二三国产| 欧美日韩高清在线| 国产亚洲福利| 日韩网站在线| 久久国产99| 欧美日韩一卡| 韩国福利一区| 中国成人在线视频| 久久久久久亚洲精品中文字幕 | 亚洲精品国产精品国自产在线| 99综合电影在线视频| 久久国产88| 欧美日韩亚洲综合一区| 狠狠色狠狠色综合日日小说| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲精品久久7777| 欧美亚洲日本一区| 欧美久久影院| 国模精品一区二区三区| 一区二区三区视频观看| 久久视频在线视频| 国产精品久久九九| 亚洲经典自拍| 久久精品国产免费观看| 欧美三区视频| 亚洲成色777777在线观看影院| 亚洲一区二区免费| 欧美黄色一区二区| 国模精品娜娜一二三区| 亚洲综合激情| 欧美精品在线视频| 韩国一区二区三区美女美女秀| 中文日韩在线| 欧美国产高清| 狠狠久久五月精品中文字幕| 亚洲欧美日韩天堂一区二区| 欧美激情视频一区二区三区免费| 韩国一区电影| 欧美亚洲在线播放| 国产精品国产三级国产普通话蜜臀| 亚洲国产精品久久久久秋霞蜜臀| 欧美中日韩免费视频| 国产精品久久久一区麻豆最新章节 | 亚洲第一色中文字幕| 欧美亚洲综合在线| 国产精品国产三级国产aⅴ9色| 亚洲精品国产欧美| 久久综合久久美利坚合众国| 国产日韩高清一区二区三区在线| 亚洲一区二区毛片| 欧美日韩喷水| 亚洲蜜桃精久久久久久久| 免费日韩成人| 在线免费不卡视频| 久久久精品性| 黑人一区二区三区四区五区| 午夜视频精品| 国产欧美亚洲日本| 亚洲欧美日韩一区二区| 国产精品国产三级国产专播精品人 | 国产一区二区三区久久久| 亚洲欧美日韩天堂一区二区| 欧美日韩在线不卡一区| 一区二区三区高清在线| 欧美日韩国产高清| 日韩一二在线观看| 欧美片网站免费| 日韩午夜黄色| 欧美日韩另类视频| 一区二区欧美激情| 国产精品a久久久久久| 中文av字幕一区| 欧美性大战久久久久| 一区二区三区久久网| 欧美日韩在线三级| 一区二区三区免费在线观看| 欧美性开放视频| 亚洲私拍自拍| 国产精品羞羞答答| 欧美中文在线观看国产| 国内精品久久国产| 美女日韩在线中文字幕| 亚洲激情六月丁香| 欧美日韩成人网| 亚洲一区免费观看| 国产欧美精品一区aⅴ影院| 久久精品国产一区二区三区| 精品1区2区| 欧美国产视频日韩| 在线视频欧美日韩精品| 国产精品乱码久久久久久| 性欧美大战久久久久久久免费观看| 国产一区二区福利| 久久综合九色综合欧美狠狠| 亚洲精品国产拍免费91在线| 欧美日韩免费观看一区| 亚洲欧美在线免费观看| 国内精品写真在线观看| 欧美电影免费观看高清完整版| 99精品国产在热久久| 国产精品亚洲а∨天堂免在线| 久久狠狠亚洲综合| 亚洲日本激情| 国产精品毛片一区二区三区| 久久国产一二区| 91久久黄色| 国产精品美女午夜av| 欧美专区日韩专区| 亚洲国产精品一区| 国产精品久久久久毛片大屁完整版| 欧美一区二区精品在线| 在线看片第一页欧美| 欧美偷拍另类| 久久久久久久一区| 亚洲免费观看在线视频| 国产伦精品一区二区三区| 鲁大师成人一区二区三区| 一区二区三区日韩欧美| 国内在线观看一区二区三区| 欧美日本亚洲韩国国产| 欧美中文在线视频| 亚洲另类春色国产| 国产亚洲一级| 欧美麻豆久久久久久中文| 欧美一区二区在线播放| 亚洲日本黄色| 国产在线日韩| 欧美性大战xxxxx久久久| 久久夜色撩人精品| 亚洲天堂第二页| 在线成人免费观看| 国产精品久久| 男人的天堂亚洲| 香蕉成人久久| 亚洲精品中文在线| 国产一区二区看久久| 欧美日韩国产一中文字不卡 | 欧美日本国产一区| 久久久久国产精品一区二区| 一本色道久久精品| 在线观看欧美视频| 国产精品尤物福利片在线观看| 欧美成人精品福利| 久久不见久久见免费视频1| 亚洲精品美女久久久久| 黄色国产精品| 国产免费成人av| 欧美日韩亚洲一区在线观看| 美女精品自拍一二三四| 欧美在线观看视频| 亚洲天堂av在线免费观看| 亚洲黄色av一区| 国内揄拍国内精品少妇国语| 国产精品三区www17con| 欧美日韩国产va另类| 免费观看在线综合色| 久久精彩视频| 午夜在线一区| 亚洲一区bb| 99re热精品| 亚洲激情视频在线| 一区二区三区在线免费观看| 国产精品影片在线观看| 国产精品久久久久毛片软件| 欧美日韩亚洲一区二区三区在线| 欧美成人精品在线| 久久嫩草精品久久久精品一| 小黄鸭视频精品导航| 亚洲资源在线观看| 亚洲视频在线播放| 中文一区字幕| 99re6这里只有精品视频在线观看| 亚洲国产精品女人久久久| 在线观看日韩一区| 黄页网站一区| 国内成人自拍视频| 韩国女主播一区| 国产一区二区久久久| 国产午夜亚洲精品羞羞网站| 国产欧美二区| 国产亚洲精品久久久久婷婷瑜伽| 国产精品一区二区三区久久久| 国产精品久久| 国产精品美女主播| 国产九九精品视频| 国产欧美日韩在线播放| 国产欧美精品一区| 国产老女人精品毛片久久| 国产精品一区二区欧美| 国产欧美日韩在线视频| 国产日韩综合| 狠狠狠色丁香婷婷综合激情| 在线观看欧美日本|