迭代器 生成器

迭代器协议:

1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退)

2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法)

3.协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象。

生成器

  • 语法上和函数类似:生成器函数和常规函数几乎是一样的。它们都是使用def语句进行定义,差别在于,生成器使用yield语句返回一个值,而常规函数使用return语句返回一个值
  • 自动实现迭代器协议:对于生成器,Python会自动实现迭代器协议,以便应用到迭代背景中(如for循环,sum函数)。由于生成器自动实现了迭代器协议,所以,我们可以调用它的next方法,并且,在没有值可以返回的时候,生成器自动产生StopIteration异常
  • 状态挂起:生成器使用yield语句返回一个值。yield语句挂起该生成器函数的状态,保留足够的信息,以便之后从它离开的地方继续执行

工作理论:

用__iter__转成可迭代对象

在用__next__便利

yield  和 return 一样但会保留状态

send()执行下一次的 yield ,可穿参数给 yield

三元表达式:

name='alex'
name='linhaifeng'
res='SB' if name == 'alex' else 'shuai'
print(res)

吃包子

 1 import time
 2 def wen():
 3     while True:
 4         print("准备吃包子")
 5         baozi=yield 1
 6         print("正在吃包子%s"%baozi)
 7         time.sleep(2)
 8 def shi():
 9     c1=wen()
10     c2=wen()
11     c1.__next__()
12     c2.__next__()
13     for i in range(10):
14         time.sleep(2)
15         c1.send(i)
16         c2.send(i)
17 shi()
原文地址:https://www.cnblogs.com/shizhengwen/p/6145317.html