1 迭代器(Iterator)
- Iterable
>>> from collections import Iterable
>>> isinstance([1,2,3],Iterable)
True
总结:凡是可作用于 for 循环的对象都是 Iterable 类型;
- Iterator
>>> a = [1,2,3,4,5]
>>> f = (x for x in a)
>>> f
<generator object <genexpr> at 0x021379C0>
>>> next(f)
4
>>> next(f)
5
>>> next(f)
6
>>> next(f)
7
>>> next(f)
8
>>> isinstance(f,collections.Iterator)
True
总结:凡是可作用于 next() 函数的对象都是 Iterator 类型,即迭代器
>>> a=[1,2,3]
>>> b=(1,2,3)
>>> c='abc'
>>> isinstance(a,Iterable)
True
>>> isinstance(b,Iterable)
True
>>> isinstance(c,Iterable)
True
总结: 集合数据类型如 list 、 dict 、 str 等是 Iterable 但不是 Iterator ,不过可以 通过 iter() 函数获得一个 Iterator 对象。 目的是在使用集合的时候,减少占用的内容。
>>> iter(a)
<list_iterator object at 0x02131330>
>>> f=iter(a)
>>> isinstance(f,collections.Iterator)
True
总结:生成器都是 Iterator 对象,但 list 、 dict 、 str 虽然是 Iterable ,却不是 Iterator 。
把 list 、 dict 、 str 等 Iterable 变成 Iterator 可以使用 iter() 函数。
2 多线程模拟
- 模拟多任务(进程,线程,协程)实现方式之一:协程
def test1():
while True:
print("--1--")
yield None
def test2():
while True:
print("--2--")
yield None
t1 = test1()
t2 = test2()
while True:
t1.__next__()
t2.__next__()
网友评论