0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python生成器的使用方法

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-11-03 15:41 次阅读

举一个例子,编写一个函数计算一串数字里所有偶数的个数,其实是很简单的问题,但是有些人是用生成器这么写的:

  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,让它在列表解析式后判断数字是否为偶数,是偶数才会成为最终生成的列表中的一员,这样有另一个加速:

  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! 不仅如此,还能继续加速!sum对于整数有一个快速路径,但是这个快速路径只激活类型为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微秒!怎么样,小伙伴们学到了吗

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4304

    浏览量

    62426
  • 生成器
    +关注

    关注

    7

    文章

    313

    浏览量

    20975
  • python
    +关注

    关注

    56

    文章

    4782

    浏览量

    84449
收藏 人收藏

    评论

    相关推荐

    利用雷达目标生成器测试整个雷达系统的方法介绍

    本文介绍不同雷达目标生成器的架构,阐明适合雷达系统性能测试的目标生成器的设计要求和准则,同时给出测量结果举例。
    发表于 03-29 09:09 2596次阅读

    如何去使用生成器

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

    python生成器

    python生成器1. 什么是生成器生成器(英文名 Generator ),是一个可以像迭代器那样使用for循环来获取元素的函数。生成器
    发表于 02-24 15:56

    pim卡资料生成器

    pim卡资料生成器
    发表于 11-22 23:23 6次下载

    自制酸奶生成器

    自制酸奶生成器
    发表于 04-23 11:48 930次阅读
    自制酸奶<b class='flag-5'>生成器</b>

    LED段码生成器

    本文提供的LED段码生成器,希望对你的学习有所帮助!
    发表于 06-03 15:19 97次下载

    代码生成器的应用

    jeesite框架代码生成器,可以很方便的生成代码,挺不错的。
    发表于 01-14 15:19 0次下载

    数码管代码生成器

    数码管代码生成器,迅速生成数码管的相应代码
    发表于 04-25 10:54 40次下载

    STM32库函数代码自动生成器正式版

    STM32库函数代码自动生成器正式版 STM32库函数代码自动生成器正式版
    发表于 07-25 18:52 0次下载

    AN-113:精密坡道生成器

    AN-113:精密坡道生成器
    发表于 05-16 12:04 6次下载
    AN-113:精密坡道<b class='flag-5'>生成器</b>

    python生成器是什么

    python生成器 1. 什么是生成器生成器(英文名 Generator ),是一个可以像迭代器那样使用for循环来获取元素的函数。 生成器
    的头像 发表于 02-24 15:53 3620次阅读

    Arduino赞美生成器

    电子发烧友网站提供《Arduino赞美生成器.zip》资料免费下载
    发表于 11-09 14:22 1次下载
    Arduino赞美<b class='flag-5'>生成器</b>

    通用RFID生成器

    通用RFID生成器资料分享
    发表于 02-10 15:35 1次下载

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

    Python 是一种以灵活性和多功能性着称的语言,它提供了一种称为生成器的强大功能。
    发表于 07-19 14:33 470次阅读

    TSMaster报文发送的信号生成器操作说明

    信号生成器功能是TSMaster分析中的报文发送模块。信号生成器用于发送和配置每个CAN/LIN信号的值变化行为,简而言之,这是一个可以控制和调整CAN/LIN信号值的功能。我们可选择的信号生成器
    的头像 发表于 12-23 08:21 927次阅读
    TSMaster报文发送的信号<b class='flag-5'>生成器</b>操作说明