吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python哪種方式循環最快呢?

新機器視覺 ? 來源:StarryLand ? 2023-04-01 09:32 ? 次閱讀

眾所周知,Python 不是一種執行效率較高的語言。此外在任何語言中,循環都是一種非常消耗時間的操作。假如任意一種簡單的單步操作耗費的時間為 1 個單位,將此操作重復執行上萬次,最終耗費的時間也將增長上萬倍。

while和for是 Python 中常用的兩種實現循環的關鍵字,它們的運行效率實際上是有差距的。比如下面的測試代碼:

importtimeit


defwhile_loop(n=100_000_000):
i=0
s=0
whileiwhileloop4.718853999860585
#=>forloop3.211570399813354

這是一個簡單的求和操作,計算從 1 到 n 之間所有自然數的總和。可以看到for循環相比while要快 1.5 秒。

其中的差距主要在于兩者的機制不同。

在每次循環中,while實際上比for多執行了兩步操作:邊界檢查和變量i的自增。即每進行一次循環,while 都會做一次邊界檢查 (while i < n)和自增計算(i +=1)。這兩步操作都是顯式的純 Python 代碼。

for循環不需要執行邊界檢查和自增操作,沒有增加顯式的 Python 代碼(純 Python 代碼效率低于底層的 C 代碼)。當循環的次數足夠多,就出現了明顯的效率差距。

可以再增加兩個函數,在for循環中加上不必要的邊界檢查和自增計算:

importtimeit


defwhile_loop(n=100_000_000):
i=0
s=0
whileiwhileloop4.718853999860585
#=>forloop3.211570399813354
#=>forloopwithincrement4.602369500091299
#=>forloopwithtest4.18337869993411

可以看出,增加的邊界檢查和自增操作確實大大影響了for循環的執行效率。

前面提到過,Python 底層的解釋器和內置函數是用 C 語言實現的。而 C 語言的執行效率遠大于 Python。

對于上面的求等差數列之和的操作,借助于 Python 內置的sum函數,可以獲得遠大于for或while循環的執行效率。

importtimeit


defwhile_loop(n=100_000_000):
i=0
s=0
whileiwhileloop4.718853999860585
#=>forloop3.211570399813354
#=>sumrange0.8658821999561042

可以看到,使用內置函數sum替代循環之后,代碼的執行效率實現了成倍的增長。

內置函數sum的累加操作實際上也是一種循環,但它由 C 語言實現,而for循環中的求和操作是由純 Python 代碼s += i實現的。C > Python。

再拓展一下思維。小時候都聽說過童年高斯巧妙地計算 1 到 100 之和的故事。1…100 之和等于 (1 + 100) * 50。這個計算方法同樣可以應用到上面的求和操作中。

importtimeit


defwhile_loop(n=100_000_000):
i=0
s=0
whileiwhileloop4.718853999860585
#=>forloop3.211570399813354
#=>sumrange0.8658821999561042
#=>mathsum2.400018274784088e-06

最終 math sum 的執行時間約為2.4e-6,縮短了上百萬倍。這里的思路就是,既然循環的效率低,一段代碼要重復執行上億次。

索性直接不要循環,通過數學公式,把上億次的循環操作變成只有一步操作。效率自然得到了空前的加強。

最后的結論(有點謎語人):

實現循環的最快方式—— —— ——就是不用循環

對于 Python 而言,則盡可能地使用內置函數,將循環中的純 Python 代碼降到最低。





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137712
  • python
    +關注

    關注

    56

    文章

    4807

    瀏覽量

    85037

原文標題:Python 哪種方式循環最快,或許顛覆你的認知!

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    一文詳解python循環

    今天給大家帶來python循環
    發表于 10-01 10:48 ?6968次閱讀
    一文詳解<b class='flag-5'>python</b><b class='flag-5'>循環</b>

    python for循環

    python for循環for 循環可以遍歷任何序列的項目,如一個列表或者一個字符串。它的基本語法是for 元素 in 序列對象:1. 普通循環直接上案例>>> phones
    發表于 02-25 16:28

    python while循環

    python while循環while 語句用于循環執行程序,即在某條件下,循環執行某段程序,以處理需要重復處理的相同任務。其基本形式為:while 判斷條件: 執行語句1. 普通的
    發表于 02-28 16:40

    Python for、while 等循環速度對比

    的結論(有點謎語人):實現循環最快方式—— —— ——就是不用循環對于 Python 而言,則盡可能地使用內置函數,將
    發表于 03-25 16:05

    python for循環的案例說明

    python for循環 for 循環可以遍歷任何序列的項目,如一個列表或者一個字符串。 它的基本語法是 for 元素 in 序列對象: 代碼塊 1. 普通循環 直接上案例 phone
    的頭像 發表于 02-25 16:27 ?3137次閱讀

    詳解Python的for和while循環

    Python 的 for 和 while 循環是靈活并且高級的,語法自然、讀起來像偽代碼。而 Cython 也支持 for 和 while,無需修改。但由于循環通常占據程序運行時的大部分時間,因此我們可以通過一些優化,確保 Cy
    的頭像 發表于 06-24 16:02 ?1540次閱讀

    Python的while循環是什么

    Python中有2種循環。一種循環次數明確,另一種循環次數不明確。`for循環`的循環重復次數是
    的頭像 發表于 02-23 11:15 ?1325次閱讀

    Python中的while循環結構

    Python 中,while 循環是一種重復執行代碼塊的結構,只要指定的條件為 True,就會繼續執行。
    的頭像 發表于 04-19 15:44 ?1738次閱讀

    Python中的for循環結構

    Python 中,for 循環是一種常用的結構,用于遍歷序列(如列表、元組、字符串)中的元素。
    的頭像 發表于 04-19 15:45 ?2480次閱讀

    詳解Python中的while循環

    說起編程語言中的循環,一般 for 循環用的時候比較多,因為相比于 while 循環,for 循環的代碼量更少。不過有時候也會用到 while 循環
    的頭像 發表于 04-26 17:55 ?1467次閱讀

    Python循環語句介紹

    哈嘍大家好,我是知道。今天帶大家了解下Python循環語句 定義循環語句允許我們執行一個語句或語句組多次 類型Python提供了兩種不同類型的循環
    的頭像 發表于 05-11 17:39 ?962次閱讀

    python最簡單for循環例子

    Python是一種簡單而又強大的編程語言,通過其清晰的語法和豐富的功能庫,我們可以實現各種各樣的任務。其中一個最基本的語法結構就是for循環,讓我們來看一下如何使用for循環來編寫一個最簡單的例子
    的頭像 發表于 11-21 14:53 ?1213次閱讀

    python循環里的輸出結果匯總

    循環是計算機編程中常用的一種控制結構,用于重復執行一段代碼。Python提供了多種類型的循環結構,包括for循環和while循環。在這篇文章
    的頭像 發表于 11-22 09:59 ?1886次閱讀

    python循環創建變量并賦值

    循環Python編程中非常重要的一個概念,它可以讓我們輕松地重復執行某些代碼塊,從而簡化編程過程并提高代碼的效率。在循環中,我們經常需要創建變量并賦值,這是非常常見的操作。接下來,我將詳盡地解釋在
    的頭像 發表于 11-23 14:51 ?1759次閱讀

    python怎么設置循環次數

    Python中,可以使用循環語句來重復執行一段代碼多次。要設置循環次數,可以使用循環的計數器來控制循環的執行次數。以下是幾種常用的設置
    的頭像 發表于 11-23 15:50 ?5451次閱讀
    皇朝娱乐城| 百家乐园鼎丰娱乐城| KK娱乐| 百家乐是多少个庄闲| 百家乐路有几家| 百家乐官网2号程序| 百家乐明灯| 百家乐官网网站新全讯网| 尊龙百家乐娱乐平台| 百家乐官网百家乐官网论坛| 万达百家乐娱乐城| 百家乐官网直揽经验| 真人娱乐城源码| 澳门百家乐真人娱乐场| 百家乐官网赢钱好公式| 免费百家乐计划工具| 百家乐官网官网站| 365足球备用| 百家乐平注常赢打法| 百家乐官网金海岸| 棋牌室经营| 百家乐赌博机假在哪里| 澳门百家乐官网娱乐开户| 太阳城巧克力| 百家乐赢钱密籍| 屏东市| 金海岸百家乐的玩法技巧和规则| 百家乐官网一黑到底| 新濠国际| 庞博百家乐的玩法技巧和规则| 沙龙百家乐官网娱乐场开户注册 | 百家乐官网专打方法| 商南县| 蓝宝石百家乐娱乐城| 百家乐官网什么方法容易赢| 百家乐官网视频麻将| 大发888 备用6222| 网上百家乐有没有假| 百家乐官网双龙| 化德县| 大发888zhldu|