1.生成器
利用迭代器,我们可以在每次迭代获取数据(通过next()方法)时按照特定的规律进行生成。
这里是讲迭代器的链接https://blog.youkuaiyun.com/qq_42223962/article/details/105668619
但是我们在实现一个迭代器时,关于当前迭代到的状态需要我们自己记录,进而才能根据当前状态生成下一个数据。为了达到记录当前状态,并配合next()函数进行迭代使用,我们可以采用更简便的语法,即生成器(generator)。生成器是一类特殊的迭代器。
首先是第一种,创建生成器的方法!
可以直接使用next()方法使用,也可以用for循环
2.创建一个生成器
如果我们需要创建一个迭代器,就要实现它的__next__
方法和__iter__
方法的.
但是生成器很强大,它有自己的方法,也相对比较简单.就是使用到关键字yield
简单的创建一个数列,即 1,2,2,4,8,16...,然后创建它的实例对象.调用next()方法
所有这就是我们的生成器,即在def中有关键字yield,我们就称之为生成器!!
他的原理就是,就是将yield关键字后面表达式的值作为返回值返回,类似return的作用,然后他会将当前的位置作为断点保存起来,暂时将生成器挂起来,等下次被调用的时候,会从断点位置开始运行.
3.另一个唤醒方式send
我们除了可以使用next()函数来唤醒生成器继续执行外,还可以使用send()函数来唤醒执行。使用send()函数的一个好处是可以在唤醒的同时向断点处传入一个附加数据。
这样可以更加灵活的处理我们需要运行的运算操作,但是要注意的是,一般第一次唤醒时,我们不用send()方法进行唤醒,仍然使用next()