Python生成器

Python生成器

1. 生成器的概念

生成器是一类特殊的迭代器,它不需要再迭代器一样写__iter__()和__next__()方法了, 使用更加方便,它依然可以使用next函数和for循环取值

2. 创建生成器两种方法

    1. 第一种方法很简单,只要把一个列表生成式的 [ ] 改成 ( )

执行结果:

    1. 在def函数里面看到有yield关键字那么就是生成器

在使用生成器实现的方式中,我们将原本在迭代器__next__方法中实现的基本逻辑放到一个函数中来实现,但是将每次迭代返回数值的return换成了yield,此时新定义的函数便不再是函数,而是一个生成器了。

简单来说:只要在def中有yield关键字的 就称为 生成器

3.生成器使用return关键字

提示:

  • 生成器里面使用return关键字语法上没有问题,但是代码执行到return语句会停止迭代,抛出停止迭代异常
  • 在python3里面可以使用return关键字,python2不支持

yield和return的对比

  • 使用了yield关键字的函数不再是函数,而是生成器。(使用了yield的函数就是生成器)
  • 代码执行到yield会暂停,然后把结果返回出去,下次启动生成器会在暂停的位置继续往下执行
  • 每次启动生成器都会返回一个值,多次启动可以返回多个值,也就是yield可以返回多个值
  • return只能返回一次值,代码执行到return语句就停止迭代,抛出停止迭代异常

4. 使用send方法启动生成器并传参

send方法启动生成器的时候可以传参数

执行结果:

注意:如果第一次启动生成器使用send方法,那么参数只能传入None,一般第一次启动生成器使用next函数

小结

  • 生成器创建有两种方式,一般都使用yield关键字方法创建生成器
  • yield特点是代码执行到yield会暂停,把结果返回出去,再次启动生成器在暂停的位置继续往下执行

发表评论

邮箱地址不会被公开。 必填项已用*标注