python中的生成器

⽤迭代器,可以在每次迭代取数据(通next()⽅法)按照特定的⾏⽣成。但是我们实现⼀个迭代器,关于当前迭代到的状需要我们⾃⼰记录⽽才能根据当前状态⽣成下⼀个数据。了达到记录当前状态,并配合next()函数进⾏迭代使⽤,我们可以采⽤更便的法,即⽣成器(generator)⽣成器是⼀类特殊的迭代器。

 

创建⽣成器⽅法1

要创建⼀个⽣成器,有很多种⽅法。第⼀种⽅法很简单,只要把⼀个列表⽣成式的[]改成()

 

创建⽣成器⽅法2

generator⾮常强⼤。如果推算的算法比较复杂,⽤类似列表⽣成式的        for循环⽆法实现时候可以⽤函数来实现

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



总结

 1.使⽤了yield关键字的函数不再是函数,⽽是⽣成器。(使⽤了yield的函数就是⽣成器)

2.yield关键字有两点作⽤:

                  保存当前运状态(断点),然后暂停执行,即将⽣成器(函数)挂起

                 yield关键字后⾯表达式的值作为返回值此时可以理解为起到了return的作

可以使next()函数让⽣成器从断点处继续执行,即醒⽣成器(函数)

Python3中的⽣成器可以使⽤return返回最终运⾏的返回值,⽽Python2 中的⽣成器不允许使⽤return返回⼀个返回值(即可以使⽤return⽣成器中退出,但return后不能有任何表达式)。

 

 

使send唤醒

我们除了可以使next()函数来唤醒⽣成器继续执⾏外,可以使⽤send()函数来唤醒执⾏。使⽤send()函数的⼀个好处是可以在唤醒同时向断点处传入⼊⼀个附加数据。



注意:  

 gen_obj.__next__()     等价于 gen_obj.send(none)





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值