3、生成器和迭代器

    可以用next()方法依次取值的对象称为迭代器。

    生成器是迭代器。

    列表不是迭代器,列表是可迭代对象,列表可以通过iter(list)转化为迭代器。

    一、生成器

         1、定义

x = [1,2,3,4]
y = (i for i in x)
print(type(y))
for a in y:
    print(a)
def foo(n):
    while True:
        n += 1
        yield n
f = foo(5)
print(type(f))

      2、生成器生成斐波那契数列

def foo(length):
    a,b = 0,1
    n =0
    while n < length:
        # print(b)
        yield b
        a,b = b,a+b
        n += 1
    return '没有更多元素了'    
g = foo(10)
for i in g:
    print(i)

      3、生成器send方法

def foo():
    i = 0
    while i < 3:
        tmp = yield i
        print('tmp:',tmp)
        i += 1

g = foo()
n1 = g.send(None)
print(n1)
n2 = g.send(2)
print(n2)
n3 = g.send(3)
print(n3)

      4、生成器之简单协程

def task1(n):
    for i in range(n):
        print('正在听第{}首歌'.format(n))
        yield None

def task2(n):
    for i in range(n):
        print('正在看第{}集电视剧'.format(n))
        yield None

t1 = task1(5)
t2 = task2(5)
while True:
    try:
        t1.__next__()
        t2.__next__()
    except:
        break

  

 

上一篇:Python协程与JavaScript协程的对比


下一篇:学了那么久JavaScript还不知道异步怎么实现?