曰本美女∴一区二区特级A级黄色大片, 国产亚洲精品美女久久久久久2025, 页岩实心砖-高密市宏伟建材有限公司, 午夜小视频在线观看欧美日韩手机在线,国产人妻奶水一区二区,国产玉足,妺妺窝人体色WWW网站孕妇,色综合天天综合网中文伊,成人在线麻豆网观看

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python哪種方式循環(huán)最快呢?

新機(jī)器視覺(jué) ? 來(lái)源:StarryLand ? 2023-04-01 09:32 ? 次閱讀

眾所周知,Python 不是一種執(zhí)行效率較高的語(yǔ)言。此外在任何語(yǔ)言中,循環(huán)都是一種非常消耗時(shí)間的操作。假如任意一種簡(jiǎn)單的單步操作耗費(fèi)的時(shí)間為 1 個(gè)單位,將此操作重復(fù)執(zhí)行上萬(wàn)次,最終耗費(fèi)的時(shí)間也將增長(zhǎng)上萬(wàn)倍。

while和for是 Python 中常用的兩種實(shí)現(xiàn)循環(huán)的關(guān)鍵字,它們的運(yùn)行效率實(shí)際上是有差距的。比如下面的測(cè)試代碼:

importtimeit


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

這是一個(gè)簡(jiǎn)單的求和操作,計(jì)算從 1 到 n 之間所有自然數(shù)的總和。可以看到for循環(huán)相比while要快 1.5 秒。

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

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

for循環(huán)不需要執(zhí)行邊界檢查和自增操作,沒(méi)有增加顯式的 Python 代碼(純 Python 代碼效率低于底層的 C 代碼)。當(dāng)循環(huán)的次數(shù)足夠多,就出現(xiàn)了明顯的效率差距。

可以再增加兩個(gè)函數(shù),在for循環(huán)中加上不必要的邊界檢查和自增計(jì)算:

importtimeit


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

可以看出,增加的邊界檢查和自增操作確實(shí)大大影響了for循環(huán)的執(zhí)行效率。

前面提到過(guò),Python 底層的解釋器和內(nèi)置函數(shù)是用 C 語(yǔ)言實(shí)現(xiàn)的。而 C 語(yǔ)言的執(zhí)行效率遠(yuǎn)大于 Python。

對(duì)于上面的求等差數(shù)列之和的操作,借助于 Python 內(nèi)置的sum函數(shù),可以獲得遠(yuǎn)大于for或while循環(huán)的執(zhí)行效率。

importtimeit


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

可以看到,使用內(nèi)置函數(shù)sum替代循環(huán)之后,代碼的執(zhí)行效率實(shí)現(xiàn)了成倍的增長(zhǎng)。

內(nèi)置函數(shù)sum的累加操作實(shí)際上也是一種循環(huán),但它由 C 語(yǔ)言實(shí)現(xiàn),而for循環(huán)中的求和操作是由純 Python 代碼s += i實(shí)現(xiàn)的。C > Python。

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

importtimeit


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

最終 math sum 的執(zhí)行時(shí)間約為2.4e-6,縮短了上百萬(wàn)倍。這里的思路就是,既然循環(huán)的效率低,一段代碼要重復(fù)執(zhí)行上億次。

索性直接不要循環(huán),通過(guò)數(shù)學(xué)公式,把上億次的循環(huán)操作變成只有一步操作。效率自然得到了空前的加強(qiáng)。

最后的結(jié)論(有點(diǎn)謎語(yǔ)人):

實(shí)現(xiàn)循環(huán)的最快方式—— —— ——就是不用循環(huán)

對(duì)于 Python 而言,則盡可能地使用內(nèi)置函數(shù),將循環(huán)中的純 Python 代碼降到最低。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7628

    瀏覽量

    139958
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4822

    瀏覽量

    85954

原文標(biāo)題:Python 哪種方式循環(huán)最快,或許顛覆你的認(rèn)知!

文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺(jué)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    一文詳解python循環(huán)

    今天給大家?guī)?lái)python循環(huán)。
    發(fā)表于 10-01 10:48 ?7296次閱讀
    一文詳解<b class='flag-5'>python</b><b class='flag-5'>循環(huán)</b>

    python for循環(huán)

    python for循環(huán)for 循環(huán)可以遍歷任何序列的項(xiàng)目,如一個(gè)列表或者一個(gè)字符串。它的基本語(yǔ)法是for 元素 in 序列對(duì)象:1. 普通循環(huán)直接上案例>>> phones
    發(fā)表于 02-25 16:28

    python while循環(huán)

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

    Python for、while 等循環(huán)速度對(duì)比

    的結(jié)論(有點(diǎn)謎語(yǔ)人):實(shí)現(xiàn)循環(huán)最快方式—— —— ——就是不用循環(huán)對(duì)于 Python 而言,則盡可能地使用內(nèi)置函數(shù),將
    發(fā)表于 03-25 16:05

    python for循環(huán)的案例說(shuō)明

    python for循環(huán) for 循環(huán)可以遍歷任何序列的項(xiàng)目,如一個(gè)列表或者一個(gè)字符串。 它的基本語(yǔ)法是 for 元素 in 序列對(duì)象: 代碼塊 1. 普通循環(huán) 直接上案例 phone
    的頭像 發(fā)表于 02-25 16:27 ?3239次閱讀

    詳解Python的for和while循環(huán)

    Python 的 for 和 while 循環(huán)是靈活并且高級(jí)的,語(yǔ)法自然、讀起來(lái)像偽代碼。而 Cython 也支持 for 和 while,無(wú)需修改。但由于循環(huán)通常占據(jù)程序運(yùn)行時(shí)的大部分時(shí)間,因此我們可以通過(guò)一些優(yōu)化,確保 Cy
    的頭像 發(fā)表于 06-24 16:02 ?1704次閱讀

    Python的while循環(huán)是什么

    Python中有2種循環(huán)。一種循環(huán)次數(shù)明確,另一種循環(huán)次數(shù)不明確。`for循環(huán)`的循環(huán)重復(fù)次數(shù)是
    的頭像 發(fā)表于 02-23 11:15 ?1513次閱讀

    Python中的while循環(huán)結(jié)構(gòu)

    Python 中,while 循環(huán)是一種重復(fù)執(zhí)行代碼塊的結(jié)構(gòu),只要指定的條件為 True,就會(huì)繼續(xù)執(zhí)行。
    的頭像 發(fā)表于 04-19 15:44 ?2019次閱讀

    Python中的for循環(huán)結(jié)構(gòu)

    Python 中,for 循環(huán)是一種常用的結(jié)構(gòu),用于遍歷序列(如列表、元組、字符串)中的元素。
    的頭像 發(fā)表于 04-19 15:45 ?2659次閱讀

    詳解Python中的while循環(huán)

    說(shuō)起編程語(yǔ)言中的循環(huán),一般 for 循環(huán)用的時(shí)候比較多,因?yàn)橄啾扔?while 循環(huán),for 循環(huán)的代碼量更少。不過(guò)有時(shí)候也會(huì)用到 while 循環(huán)
    的頭像 發(fā)表于 04-26 17:55 ?1670次閱讀

    Python循環(huán)語(yǔ)句介紹

    哈嘍大家好,我是知道。今天帶大家了解下Python循環(huán)語(yǔ)句 定義循環(huán)語(yǔ)句允許我們執(zhí)行一個(gè)語(yǔ)句或語(yǔ)句組多次 類型Python提供了兩種不同類型的循環(huán)
    的頭像 發(fā)表于 05-11 17:39 ?1104次閱讀

    python最簡(jiǎn)單for循環(huán)例子

    Python是一種簡(jiǎn)單而又強(qiáng)大的編程語(yǔ)言,通過(guò)其清晰的語(yǔ)法和豐富的功能庫(kù),我們可以實(shí)現(xiàn)各種各樣的任務(wù)。其中一個(gè)最基本的語(yǔ)法結(jié)構(gòu)就是for循環(huán),讓我們來(lái)看一下如何使用for循環(huán)來(lái)編寫一個(gè)最簡(jiǎn)單的例子
    的頭像 發(fā)表于 11-21 14:53 ?1580次閱讀

    python循環(huán)里的輸出結(jié)果匯總

    循環(huán)是計(jì)算機(jī)編程中常用的一種控制結(jié)構(gòu),用于重復(fù)執(zhí)行一段代碼。Python提供了多種類型的循環(huán)結(jié)構(gòu),包括for循環(huán)和while循環(huán)。在這篇文章
    的頭像 發(fā)表于 11-22 09:59 ?2146次閱讀

    python循環(huán)創(chuàng)建變量并賦值

    循環(huán)Python編程中非常重要的一個(gè)概念,它可以讓我們輕松地重復(fù)執(zhí)行某些代碼塊,從而簡(jiǎn)化編程過(guò)程并提高代碼的效率。在循環(huán)中,我們經(jīng)常需要?jiǎng)?chuàng)建變量并賦值,這是非常常見(jiàn)的操作。接下來(lái),我將詳盡地解釋在
    的頭像 發(fā)表于 11-23 14:51 ?2026次閱讀

    python怎么設(shè)置循環(huán)次數(shù)

    Python中,可以使用循環(huán)語(yǔ)句來(lái)重復(fù)執(zhí)行一段代碼多次。要設(shè)置循環(huán)次數(shù),可以使用循環(huán)的計(jì)數(shù)器來(lái)控制循環(huán)的執(zhí)行次數(shù)。以下是幾種常用的設(shè)置
    的頭像 發(fā)表于 11-23 15:50 ?5817次閱讀