迭代器 生成器 协程

生成器可以让一个函数暂停

for循环内部处理异常

while循环直接抛出异常

创建生成器方法

方法一

只要把一个列表生成式的 [ ] 改成 ( )

方法二

yield a #如果一个函数中有yield语句,那么这个函数就不在是普通函数,而是一个生成器模板

#如果在调用函数的时候,发现函数中有yield,此时不再是调用函数了,而是创建一个生成器对象

协程

协程 切换消耗资源少

# 并行(真的多任务)

# 并发(假的多任务)--->使用yield完成的多任务

多任务优先考虑协程,线程,进程

进程,线程、协程的对比

1、进程是资源分配的单位

2、线程是操作系统调度的单位

3、进程切换需要的资源最大,效率很低,最稳定

4、线程切换需要的资源一般,效率一般(不考虑GIL)

5、协程切换任务资源很小,效率高,优先考虑协程

6、多进程、多线程根据cpu核数不一样可能是并行的,但是协程是在一个线程中 所以是并发

使用如下命令安装greenlet模块:

sudo pip3 install greenlet   或以管理员身份进入输入 pip3 install greenlet

greenlet依次运行

安装

pip3 install gevent

能够自动切换任务的模块gevent

gevent检测耗时作用

有耗时操作时需要monkey.patch_all()

迭代器

减少内存空间,还能生成数据,一种生成数据的方式·

一个类中有__iter__可迭代

一个类中既有__iter__还有__next__被称为迭代器

列表、元组、字典、集合、字符串都是可迭代的

class Fibonacci(object)  斐波拉契数列

括号里的object为了兼容python2

你可能感兴趣的:(迭代器 生成器 协程)