可迭代的:对象下有__iter__方法的都是可迭代的对象 迭代器:对象.__iter__()得到的结果就是迭代器 迭代器的特性: 迭代器.__next__() 取下一个值 优点: 1.提供了一种统一的迭代对象的方式,不依赖于索引 2.惰性计算 缺点: 1.无法获取迭代器的长度 2.一次性的,只能往后取值,不能往前退,不能像索引那样去取得某个位置的值 生成器:函数内带有yield关键字,那么这个函数执行的结果就是生成器 生成器本质就是迭代器 def func(): n=0 while True: yield n n+=1 g=func() res=next(g) res=next(g) for i in g: pass 总结yield的功能: 1.相当于把__iter__和__next__方法封装到函数内部 2.与return比,return只能返回一次,而yield能返回多次 3.函数暂停已经继续运行的状态是通过yield保存的 yield的表达式形式: food=yield def eater(name): print(‘%s start to eat‘ %name) while True: food=yield print(‘%s eat %s‘ %(name,food)) e=eater(‘zhejiangF4‘) #e.send与next(e)的区别 #1.如果函数内yield是表达式形式,那么必须先next(e) #2.二者的共同之处是都可以让函数在上次暂停的位置继续运行,不一样的地方在于 send在触发下一次代码的执行时,会顺便给yield传一个值 #协程函数的定义? #协程函数的应用?
时间: 2024-10-12 13:50:50