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

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

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

Python生成器的使用方法

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-11-03 15:41 ? 次閱讀

舉一個例子,編寫一個函數(shù)計算一串?dāng)?shù)字里所有偶數(shù)的個數(shù),其實是很簡單的問題,但是有些人是用生成器這么寫的:

  1. In[66]:def f1(x):

  2. ....:return sum(c in'02468'for c in str(x))

  3. ....:

  4. In[68]: x = int('1234567890'*50)

  5. In[69]:%timeit f1(x)

  6. 10000 loops, best of 5:52.2μs per loop

生成器這么用其實是速度最慢的一種做法,花費了52微秒。我們來看看如果我改成列表解析式會怎么樣:

  1. In[67]:def f2(x):

  2. ....:return sum([c in'02468'for c in str(x)])

  3. In[68]: x = int('1234567890'*50)

  1. In[70]:%timeit f2(x)

  2. 10000 loops, best of 5:40.5μs per loop

你看,這個 加速非常地明顯,僅花費了40.5微秒 。

而且還能進一步改進, 如果我們改變之前定義的f2,讓它在列表解析式后判斷數(shù)字是否為偶數(shù),是偶數(shù)才會成為最終生成的列表中的一員,這樣有另一個加速:

  1. In[71]:def f3(x):

  2. ....:return sum([Truefor c in str(x)if c in'02468'])

  3. ....:

  4. In[72]:%timeit f3(x)

  5. 10000 loops, best of 5:34.9μs per loop

34.9微秒,Perfect! 不僅如此,還能繼續(xù)加速!sum對于整數(shù)有一個快速路徑,但是這個快速路徑只激活類型為int. bool不行,因此我們把True改成1,能更再加一次速!

  1. In[73]:def f4(x):

  2. ....:return sum([1for c in str(x)if c in'02468'])

  3. ....:

  4. In[74]:%timeit f4(x)

  5. 10000 loops, best of 5:33.3μs per loop

又快了,33.3微秒!怎么樣,小伙伴們學(xué)到了嗎

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

    關(guān)注

    3

    文章

    4256

    瀏覽量

    62223
  • 生成器
    +關(guān)注

    關(guān)注

    7

    文章

    313

    瀏覽量

    20919
  • python
    +關(guān)注

    關(guān)注

    54

    文章

    4756

    瀏覽量

    84283
收藏 人收藏

    評論

    相關(guān)推薦

    利用雷達目標(biāo)生成器測試整個雷達系統(tǒng)的方法介紹

    本文介紹不同雷達目標(biāo)生成器的架構(gòu),闡明適合雷達系統(tǒng)性能測試的目標(biāo)生成器的設(shè)計要求和準(zhǔn)則,同時給出測量結(jié)果舉例。
    發(fā)表于 03-29 09:09 ?2549次閱讀

    如何去使用生成器

    生成器的工作原理是什么?如何去使用生成器呢?
    發(fā)表于 10-25 08:44

    python生成器

    python生成器1. 什么是生成器生成器(英文名 Generator ),是一個可以像迭代器那樣使用for循環(huán)來獲取元素的函數(shù)。生成器
    發(fā)表于 02-24 15:56

    pim卡資料生成器

    pim卡資料生成器
    發(fā)表于 11-22 23:23 ?6次下載

    自制酸奶生成器

    自制酸奶生成器
    發(fā)表于 04-23 11:48 ?917次閱讀
    自制酸奶<b class='flag-5'>生成器</b>

    LED段碼生成器

    本文提供的LED段碼生成器,希望對你的學(xué)習(xí)有所幫助!
    發(fā)表于 06-03 15:19 ?97次下載

    代碼生成器的應(yīng)用

    jeesite框架代碼生成器,可以很方便的生成代碼,挺不錯的。
    發(fā)表于 01-14 15:19 ?0次下載

    數(shù)碼管代碼生成器

    數(shù)碼管代碼生成器,迅速生成數(shù)碼管的相應(yīng)代碼
    發(fā)表于 04-25 10:54 ?40次下載

    STM32庫函數(shù)代碼自動生成器正式版

    STM32庫函數(shù)代碼自動生成器正式版 STM32庫函數(shù)代碼自動生成器正式版
    發(fā)表于 07-25 18:52 ?0次下載

    AN-113:精密坡道生成器

    AN-113:精密坡道生成器
    發(fā)表于 05-16 12:04 ?6次下載
    AN-113:精密坡道<b class='flag-5'>生成器</b>

    python生成器是什么

    python生成器 1. 什么是生成器生成器(英文名 Generator ),是一個可以像迭代器那樣使用for循環(huán)來獲取元素的函數(shù)。 生成器
    的頭像 發(fā)表于 02-24 15:53 ?3534次閱讀

    Arduino贊美生成器

    電子發(fā)燒友網(wǎng)站提供《Arduino贊美生成器.zip》資料免費下載
    發(fā)表于 11-09 14:22 ?1次下載
    Arduino贊美<b class='flag-5'>生成器</b>

    通用RFID生成器

    通用RFID生成器資料分享
    發(fā)表于 02-10 15:35 ?1次下載

    Python中的生成器是什么?它們的效率和可用性如何?

    Python 是一種以靈活性和多功能性著稱的語言,它提供了一種稱為生成器的強大功能。
    發(fā)表于 07-19 14:33 ?450次閱讀

    TSMaster報文發(fā)送的信號生成器操作說明

    信號生成器功能是TSMaster分析中的報文發(fā)送模塊。信號生成器用于發(fā)送和配置每個CAN/LIN信號的值變化行為,簡而言之,這是一個可以控制和調(diào)整CAN/LIN信號值的功能。我們可選擇的信號生成器
    的頭像 發(fā)表于 12-23 08:21 ?837次閱讀
    TSMaster報文發(fā)送的信號<b class='flag-5'>生成器</b>操作說明