首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

小说python何时使用生成器

生成器、迭代器作为python的两个高级特性,相信大家肯定耳熟能详,都能说道上一阵,但很多时候都是说说而已,知道有这么个东西,而且是好东西,但再看看写过的代码,有多少确实使用它的?

一个语音特性,在潜意识中没用被激活,更多时候还是因为不知道它的应用场景,这里就从三个方面说说生成器什么时候应该用,而且必须用。

是否需要返回列表中的所有元素?

不需要

当做出不需要的回答时,就应该选择生成器,而不是列表,因为生成器的主要特性就是'lazy evaluation'

生成器,只有在真正需要时才生成结果,因此在不需要列表中的所有元素,自然是没必要去创建它们的,创建后还不用,那就是浪费资源,而且影响效率

例如,我们碰到如下场景,公司年会搞一个抽奖活动,规则是每人拿一个号,抽奖时根据这些号码摇号,摇出的号和你对应的号一致,那就表示中奖。

下面给出一个简单实现:

gen_winning_numbers函数是一个比较耗时的函数,随机产生10个中奖号码,如果my_number在这10个数中,表示中奖且程序退出,从这个实现中可以看到,不管如何至少需要等10s,才知道中奖结果。

而往往只要有一个中奖号码和my_number一致,就表示中奖,就无需关心其他中奖号码,也没必要生成其他剩余的号码,最优情况下,只需要1s就得到中奖结果了

使用生成器就很容易解决这个问题

函数是否需要大内存?

需要

当做出需要的回答时,就应该选择生成器,因为生成器在需要时创建,获取到结果时才开始处理,完成后在请求其他项目前可从内存中删除,释放内存

先看看下面这段代码

这段代码每次执行时至少需要占用超过100M的内存,而如果使用生成器,可是另外一番景象

得到同样的结果,但只需要10KB的内存

列表生成过程中是否需要通知?

需要

当做出需要的回答时,就应该选择生成器

在一个复杂或是耗时相对较长的列表生成过程中,用户如果不知道当前的元素过程,一味的盲目等待,那应该是很烦人的、无法接受的。

例如,下面这个过程

每次需要得到5个结果,必须得等待20s,更糟糕的是,在等待的过程中什么都做不了,也不知内部具体情况,哪怕给个进度提示也好

由上可知:

如果创建一个元素的函数很耗时,如果该函数对内存占用敏感,或是不需要列表中的所有元素,那么最佳选择是生成器,那其他情况下,都可以使用列表,对吧?

当然没问题,但是如果选择生成器是否更好呢,既拥有了上述优势,也不乏列表的熟悉味道,因为生成器转换成列表很简单

1. list方法

2. 列表生成式

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180829G1U7J300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券