Python yield与send,iter与next
2018-01-18 22:35
369 查看
说起迭代器就想起了C++的,运用模板写的很精妙,让各种容器用起来十分方便,所以来学学Python一些,以方便使用python。
(先写一部分,后面再补充)
这样写,用for遍历的时候,每次返回它本身的对象,然后调用next(),直到StopIterration,也就是不可以迭代才退出for遍历。
(先写一部分,后面再补充)
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)
相关文章推荐
- 关于Python生成器(Generator的yield、next、send)
- 初学python里的yield send next
- python--生成器:yield的表达式形式,send
- Python基础迭代器iter() 和 next()。
- 对python中的iter()函数与next()函数详解
- Python3基础 str while+iter+next 字符串的遍历与输出
- Python的运算符重载 __iter__()和 __next__()
- 迭代器(关键词:Python/iterator/iterable/__iter__/next)
- Python生成器generator之next和send运行流程
- 零基础学python-13.2 手动迭代:iter和next
- python----iter\next
- python中的next()以及iter()函数
- 浅谈Python生成器generator之next和send的运行流程(详解)
- python之__iter__函数与__next__函数
- TypeError: iter() returned non-iterator of type 'xx' 从Python3开始,要用__next__
- python迭代器:next( ),__next__( ), iter()
- Python生成器generator之next和send运行流程
- Python生成器generator之next和send运行流程
- Python3.6 下yield的常见错误(AttributeError: 'generator' object has no attribute 'next')
- Python生成器&__iter__&yield