创建对象的类中有__iter__方法。
它就是可迭代对象。
所谓的可迭代对象,就是可以被遍历的对象。
如果希望遍历能够获取到值,需要让这个__iter__方法返回一个迭代器对象
迭代器
创建该对象的类中存在__iter__方法,且存在__next__方法
则该类的实例对象为迭代器对象。
迭代器可以通过next(迭代器)获取返回值,也可通过 迭代器.__next__() 获取返回值
生成器
是一种特穆殊的迭代器
它可迭代,但是没有__iter__ __next__方法
如果类中存在yield,则该类创建的对象是生成器
可通过 next(生成器对象) 获取yield 后面根的值
也可以通过 生成器对象.send(值) 把这个值赋给 yield 左边等号的变量,例如 name = yield username
协程
利用yield可以实现协程的功能
协程是用户态的多线程,不存在纯正多线程的那种抢资源的情况
什么时候启动协程完全由程序员来控制
协程的高级用法通常使用gevent来完成
例子代码
首先安装gevent
pip install gevent
然后在代码中导入
import gevent
当代码中存在耗时操作时,会自动切换gevent对象
1,通过gevent.spawn(执行函数名,参数1,参数2)创建gevent对象
2,通过gevent.joinall(gevent对象的列表)让这些对象运转起来
3,通过导入monkey让耗时操作可以被捕获
monkey.patch_all()