Python并发编程之从生成器使用入门协程(七)
大家好,并发编程
进入第七篇。
从今天开始,我们将开始进入Python的难点,那就是协程
。
为了写明白协程的知识点,我查阅了网上的很多相关资料。发现很难有一个讲得系统,讲得全面的文章,导致我们在学习的时候,往往半知半解,学完还是一脸懵逼。
学习协程的门课程,是要认识生成器
,有了生成器
的基础,才能更好地理解协程
。
如果你是新手,那么你应该知道迭代器
,对生成器
应该是比较陌生的吧。没关系,看完这系列文章,你也能从小白成功过渡为Ptyhon高手。
再次提醒:
本系列所有的代码均在Python3下编写,也建议大家尽快投入到Python3的怀抱中来。
本文目录
- 可迭代、迭代器、生成器
- 如何运行/激活生成器
- 生成器的执行状态
- 生成器的异常处理
- 从生成器过渡到协程:yield
. 可迭代、迭代器、生成器
初学Python的时候,对于这三货真的是傻傻分不清。甚至还认为他们是等价的。
其实,他们是不一样的。
可迭代的对象,很好理解,我们很熟悉的:字符串
,list
,dict
,tuple
,deque
等
为了验证我说的,需要借助collections.abc
这个模块(Python2没有),使用isinstance()
来类别一个对象是否是可迭代的(Iterable
),是否是迭代器(Iterator
),是否是生成器(Generator
)。
输出结果
从结果来看,这些可迭代对象都不是迭代器,也不是生成器。它们有一个共同点,就是它们都可以使用for
来循环。这一点,大家都知道,我们就不去验证了。
扩展知识:
可迭代对象,是其内部实现了,__iter__
这个魔术方法。
可以通过,dir()
方法来查看是否有__iter__
来判断一个变量是否是可迭代的。
接下来是,迭代器
。
对比可迭代对象,迭代器
其实就只是多了一个函数而已。就是__next__()
,我们可以不再使用for
循环来间断获取元素值。而可以直接使用next()方法来实现。
迭代器,是在可迭代的基础上实现的。要创建一个迭代器,我们首先,得有一个可迭代对象。
现在就来看看,如何创建一个可迭代对象,并以可迭代对象为基础创建一个迭代器。
输出
0
1
2
3
4
True
False
True
True
0
1
2
3
4
相关文章