关于Python中的 yield

今天研究一下 python 中的 yield。

首先要明白的是 generator 叫做“迭代器”,是可以用在 for 循环中的,包括 生成器 和 带有 yield 表达式的 generator function.

              这里yield 有两个优点:

                               1. 不会把所有数据取出来放进内存里,而是返回一个对象,用多少取多少,节省内存空间。

                               2. 从上一次中断的地方继续,不会结束循环。

                        这里可以想一下你做爬虫的那个 work_list[],实际上是非常大的,直接用for循环去访问没有用yield访问来的科学。

 

1. yield

yield英文意思是“生产” / "屈服"。其实加了 yield的函数就是一个generator。next() 函数可以让generator 执行。

这里看一个例子。

可以看到直接调用这个 test() 函数,函数并没有执行,而是返回了一个 generator 的对象,因为函数里面有yield表达式。通过next() 函数可以恢复 generator 执行,直到下一个yield 。

可以看到,第一个 next(),函数执行到第一个yield。第二个 next() ,寻找下一个yield,最后没有yield,会报异常。 

next() 和 send(None)

在 generator 这里,next() 和 send(None) 的作用是一样的。

next(c) 就相当于 c.send(None) 。 看一个例子

这里主要看一下。首先每次 next() 都把 generator 推向下一个 yield。 send() 函数如果含参数的话,就会替换 yield 表达式。从而输出。

使用 generator

在之前的云图脚本中,我们使用 jieba.cut() 方法返回的对象就是一个 gene。只需要用循环去访问即可。

其实我们在 genertaror 中,基本从来都不会用到 next() 函数去写,上面写的东西只是给你理解 generator 这个东西。

下面看一个实际应用的例子

实际上对于 generator 在 for 循环中的调用,应该是一直在内部调用 next() 直到抛出异常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值