国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

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

詳解Python中兩種實現(xiàn)循環(huán)的關鍵字

python爬蟲知識分享 ? 來源:python爬蟲知識分享 ? 作者:python爬蟲知識分享 ? 2022-03-25 16:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

whilefor 是 Python 中常用的兩種實現(xiàn)循環(huán)的關鍵字,它們的運行效率實際上是有差距的。比如下面的測試代碼:

import timeit


def while_loop(n=100_000_000):
    i = 0
    s = 0
    while i < n:
        s += i
        i += 1
    return s

def for_loop(n=100_000_000):
    s = 0
    for i in range(n):
        s += i
    return s

def main():
    print('while loop\t\t', timeit.timeit(while_loop, number=1))
    print('for loop\t\t', timeit.timeit(for_loop, number=1))

if __name__ == '__main__':
    main()
# => while loop               4.718853999860585
# => for loop                 3.211570399813354

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

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

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

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

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

import timeit


def while_loop(n=100_000_000):
    i = 0
    s = 0
    while i < n:
        s += i
        i += 1
    return s

def for_loop(n=100_000_000):
    s = 0
    for i in range(n):
        s += i
    return s

def for_loop_with_inc(n=100_000_000):
    s = 0
    for i in range(n):
        s += i
        i += 1
    return s

def for_loop_with_test(n=100_000_000):
    s = 0
    for i in range(n):
        if i < n:
            pass
        s += i
    return s

def main():
    print('while loop\t\t', timeit.timeit(while_loop, number=1))
    print('for loop\t\t', timeit.timeit(for_loop, number=1))
    print('for loop with increment\t\t',
          timeit.timeit(for_loop_with_inc, number=1))
    print('for loop with test\t\t', timeit.timeit(for_loop_with_test, number=1))

if __name__ == '__main__':
    main()
# => while loop               4.718853999860585
# => for loop                 3.211570399813354
# => for loop with increment          4.602369500091299
# => for loop with test               4.18337869993411

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

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

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

import timeit


def while_loop(n=100_000_000):
    i = 0
    s = 0
    while i < n:
        s += i
        i += 1
    return s

def for_loop(n=100_000_000):
    s = 0
    for i in range(n):
        s += i
    return s

def sum_range(n=100_000_000):
    return sum(range(n))

def main():
    print('while loop\t\t', timeit.timeit(while_loop, number=1))
    print('for loop\t\t', timeit.timeit(for_loop, number=1))
    print('sum range\t\t', timeit.timeit(sum_range, number=1))

if __name__ == '__main__':
    main()
# => while loop               4.718853999860585
# => for loop                 3.211570399813354
# => sum range                0.8658821999561042

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

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

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

import timeit


def while_loop(n=100_000_000):
    i = 0
    s = 0
    while i < n:
        s += i
        i += 1
    return s

def for_loop(n=100_000_000):
    s = 0
    for i in range(n):
        s += i
    return s

def sum_range(n=100_000_000):
    return sum(range(n))

def math_sum(n=100_000_000):
    return (n * (n - 1)) // 2

def main():
    print('while loop\t\t', timeit.timeit(while_loop, number=1))
    print('for loop\t\t', timeit.timeit(for_loop, number=1))
    print('sum range\t\t', timeit.timeit(sum_range, number=1))
    print('math sum\t\t', timeit.timeit(math_sum, number=1))

if __name__ == '__main__':
    main()
# => while loop               4.718853999860585
# => for loop                 3.211570399813354
# => sum range                0.8658821999561042
# => math sum                 2.400018274784088e-06

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

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

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

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

對于 Python 而言,則盡可能地使用內(nèi)置函數(shù),將循環(huán)中的純 Python 代碼降到最低。
審核編輯:湯梓紅

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

    關注

    9

    文章

    6203

    瀏覽量

    131357
  • 代碼
    +關注

    關注

    30

    文章

    4968

    瀏覽量

    73965
  • python
    +關注

    關注

    57

    文章

    4876

    瀏覽量

    90030
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    關鍵字volatile的含意

    關鍵字volatile有什么含意? 一個定義為volatile的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設這個變量的值了。精確地說就是,優(yōu)化器在用到這個變量時必須每次都小心
    發(fā)表于 12-23 06:33

    interrupt關鍵字使用

    中斷是嵌入式系統(tǒng)重要的組成部分,這導致了很多編譯開發(fā)商提供一擴展—讓標準C支持中斷。具代表事實是,產(chǎn)生了一個新的關鍵字__interrupt。下面的代碼就使用了__interrupt關鍵字
    發(fā)表于 12-22 09:36

    Temu跨境電商按關鍵字搜索Temu商品API的應用及接口請求示例

    Temu跨境電商按關鍵字搜索Temu商品API的應用及接口請求示例 Temu跨境電商按關鍵字搜索Temu商品API的應用場景 Temu跨境電商平臺按關鍵字搜索Temu商品API的主要應用場景包括但不
    的頭像 發(fā)表于 11-29 15:08 ?453次閱讀

    哪些場合會用到volatile關鍵字?

    當你理解 volatile關鍵字的含義之后,你就能明白,其實很多場合都能用到 volatile關鍵字。 1.全局變量單片機開發(fā),難免會用到全局變量。一些初級工程師,更是全局變量滿天飛。這種情況下
    發(fā)表于 11-25 08:19

    天眼查平臺關鍵字搜索企業(yè)數(shù)據(jù)API接口技術(shù)指南

    ? 一、接口概述 天眼查提供的企業(yè)搜索API接口,支持通過關鍵字查詢企業(yè)工商信息、經(jīng)營狀態(tài)等核心數(shù)據(jù)。該接口采用RESTful架構(gòu),返回JSON格式數(shù)據(jù)。 二、接口認證 調(diào)用需使用API密鑰認證
    的頭像 發(fā)表于 11-21 11:48 ?712次閱讀
    天眼查平臺<b class='flag-5'>關鍵字</b>搜索企業(yè)數(shù)據(jù)API接口技術(shù)指南

    咸魚平臺商品關鍵字搜索API接口設計與實現(xiàn)

    ) sort:排序方式(可選:price_asc, price_desc, time_desc) 二、技術(shù)實現(xiàn)方案 核心邏輯 : 關鍵詞分詞處理 多字段匹配(標題/描述/標簽) 結(jié)果排序與分頁
    的頭像 發(fā)表于 11-19 15:32 ?273次閱讀
    咸魚平臺商品<b class='flag-5'>關鍵字</b>搜索API接口設計與<b class='flag-5'>實現(xiàn)</b>

    用PLC實現(xiàn)卷徑計算的兩種算法

    卷徑計算,是動態(tài)計算如鋼卷,紙卷等存料量的一方法,它是實現(xiàn)張力控制和自動充放料、以及甩尾控制的重要前提。卷徑計算目前主流的方法有兩種,一是根據(jù)機列速度(產(chǎn)線速度)和和被測卷的轉(zhuǎn)動角
    的頭像 發(fā)表于 11-14 16:54 ?2082次閱讀
    用PLC<b class='flag-5'>實現(xiàn)</b>卷徑計算的<b class='flag-5'>兩種</b>算法

    1688平臺關鍵字搜索商品API接口技術(shù)實踐指南

    /com.alibaba.product/alibaba.product.search/ 必備參數(shù): { "keyword": "手機", // 搜索關鍵字 "pageNo": 1, // 頁碼 "pageSize": 20, // 每頁數(shù)量 "access_token": "xxx" // 認證令牌 } 二、響應
    的頭像 發(fā)表于 11-11 14:22 ?556次閱讀
    1688平臺<b class='flag-5'>關鍵字</b>搜索商品API接口技術(shù)實踐指南

    亞馬遜平臺根據(jù)關鍵字搜索商品API接口

    ? ?在電商開發(fā),集成亞馬遜平臺的商品搜索功能是常見需求。通過亞馬遜的Product Advertising API(PAAPI),開發(fā)者可以根據(jù)關鍵字高效檢索商品信息。本技術(shù)帖將逐步介紹如何調(diào)用
    的頭像 發(fā)表于 11-05 15:00 ?372次閱讀
    亞馬遜平臺根據(jù)<b class='flag-5'>關鍵字</b>搜索商品API接口

    亞馬遜 SP-API 深度開發(fā):關鍵字搜索接口的購物意圖挖掘與合規(guī)競品分析

    本文深度解析亞馬遜SP-API關鍵字搜索接口的合規(guī)調(diào)用與商業(yè)應用,涵蓋意圖識別、競品分析、性能優(yōu)化全鏈路。通過COSMO算法解析用戶購物意圖,結(jié)合合規(guī)技術(shù)方案提升關鍵詞轉(zhuǎn)化率,助力賣家實現(xiàn)數(shù)據(jù)驅(qū)動決策,安全高效優(yōu)化運營。
    的頭像 發(fā)表于 10-17 14:59 ?570次閱讀

    阿里巴巴國際站關鍵字搜索 API 實戰(zhàn):從多條件篩選到商品列表高效獲客

    ??在跨境電商數(shù)據(jù)采集場景,通過關鍵字精準搜索商品列表是基礎且核心的需求。本文將聚焦阿里巴巴國際站的關鍵字搜索接口,詳細介紹如何構(gòu)建多條件搜索請求、處理分頁數(shù)據(jù)、解析商品列表信息,并提供可直接復用的
    的頭像 發(fā)表于 08-20 09:22 ?948次閱讀
    阿里巴巴國際站<b class='flag-5'>關鍵字</b>搜索 API 實戰(zhàn):從多條件篩選到商品列表高效獲客

    micro 關鍵字搜索全覆蓋商品,并通過 API 接口提供實時數(shù)據(jù)

    micro 關鍵字搜索全覆蓋商品”并通過 API 接口提供實時數(shù)據(jù)
    的頭像 發(fā)表于 07-13 10:13 ?878次閱讀

    貼片晶振兩種常見封裝介紹

    貼片晶體振蕩器作為關鍵的時鐘頻率元件,其性能直接關系到系統(tǒng)運行的穩(wěn)定性。今天,凱擎小妹帶大家聊聊貼片晶振兩種常見封裝——金屬面封裝與陶瓷面封裝。
    的頭像 發(fā)表于 07-04 11:29 ?1262次閱讀
    貼片晶振<b class='flag-5'>中</b><b class='flag-5'>兩種</b>常見封裝介紹

    基礎篇3:掌握Python的條件語句與循環(huán)

    不同的條件執(zhí)行不同的代碼塊。Python的條件語句主要使用if、elif(else if的縮寫)和else關鍵字。 if語句 最簡單的條件語句是if語句,它的工作方式如下: 復制代碼 if 條件表達式
    發(fā)表于 07-03 16:13

    單片機編程關鍵字之volatile

    volatile 修飾的變量是說這變量可能會被意想不到地改變。通常對于程序員而言,單片機 中用的就算常見了volatile 是易變的,不穩(wěn)定的意思。其實對于很多人來說,根本沒見過這個關鍵字,不 知道
    發(fā)表于 04-02 13:47 ?2次下載