python-并发编程之协程与生成器

文章目录

1.生成器初始

# 1.1 生成器
1.迭代器: 迭代器是底层实现了__next__和__iter__方法的对象, 一般我们调用某些方法会返回迭代器, 或者通过iter()函数返回可迭代对象的迭代器. 迭代器的好处是节省内存

2.在程序中为了节省内存而编写的具有迭代器功能的东西叫做生成器
# 1.2 生成器的产生
python中提供构造生成器的方法有两种: 生成器函数 与 生成器表达式
1.生成器函数: 
常规函数定义,但是,使用yield语句而不是return语句返回结果。yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行
2.生成器表达式
类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表
# 1.3 生成器本质与优势
1.本质: 生成器的本质就是迭代器(生成器是一种特殊的迭代器)
2.优势: 惰性运算, 节省内存

2.生成器的构造

# 1.生成器函数: 个包含yield关键字的函数就是一个生成器函数。yield可以为我们从函数中返回值,但是yield又不同于return,return的执行意味着程序的结束,调用生成器函数不会得到返回的具体的值,而是得到一个可迭代的对象。每一次获取这个可迭代对象的值,就能推动函数的执行,获取新的返回值。直到函数执行结束。
import time
def genrator_fun1():
    a = 1
    print('现在定义了a变量')
    yield a
    b = 2
    print('现在又定义了b变量')
    yield b

g1 = genrator_fun1()
print('g1 : ',g1)       #打印g1可以发现g1就是一个生成器
print('-'*20)   #我是华丽的分割线
print(next(g1))
time.sleep(1)   #sleep一秒看清执行过程
print(next(g1))
# 2.生成器表达式: 将列表推导式的[]换做()即可
g = (i for i in range(10))
print(type(g))
# 重点掌握:
1.yield关键字的作用
2.生成器函数的定义
3.生成器表达式的定义
4.构建生成器
5.使用next从生成器取值

3.生成器面试题

# 1.生成器面试题(-)
def add(n,i):
    return n+i

def test():
    for i in range(4):
        yield i

g  = test()
for n in [1,10,5]:
    g = (add(n,i) for i in g)

print(list(g))

# 2.生成器面试题(二)
def demo():
    for i in range(4):
        yield i

g=demo()

g1=(i for i in g)
g2=(i for i in g1)
上一篇:Java 12 新特性概述


下一篇:VLAN基础实验