您的位置:首页 > 编程语言 > Python开发

Python yield与send,iter与next

2018-01-18 22:35 369 查看
  说起迭代器就想起了C++的,运用模板写的很精妙,让各种容器用起来十分方便,所以来学学Python一些,以方便使用python。

(先写一部分,后面再补充)

Iter与Next

  对于可以用for遍历的容器,都是可迭代对象,如dict,list,trulp,遍历的实现应该都是通过迭代器
__iter__
访问,通过
__next__()
遍历。

class Fb:
def __init__(self,n=None):
self.n=n
self.a,self.b=0,1

def __iter__(self):
return self

def __next__(self):
self.a,self.b=self.b,self.a+self.b
if self.a>10:
raise StopIteration
return self.a

def fb(self):
s=0
while(s<self.n):
self.a,self.b=self.b,self.a+self.b
s+=1
return self.a


  这样写,用for遍历的时候,每次返回它本身的对象,然后调用next(),直到StopIterration,也就是不可以迭代才退出for遍历。

yield与send

  yield可以让函数变成一个生成器,而生成器对象是迭代器,一般用于循环中,拿下面的for循环来说,当程序运行到while循环 yield b,它就换把这次循环挂起并返回值b给迭代器,然后不运行接下来的,而是把b这个值传到下一次循环,下一次循环运行结束,就返回上一次的返回值的点继续运行完成当次循环,send就是上一次yield的返回值也就是(yield b)的值如果要修改b的值测试是否修改,可以这样写 b=yield b来看每次的返回值

def Fbd(n):
s,a,b=0,0,1
while(s<n):
yield b
a,b=b,a+b
s=s+1
d=Fbd(5)  #类型是一个生成器,只能用来遍历
print (d.__next__())#1
print (d.__next__())#1
print (d.__next__())#2
for i in Fbd(5)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: