python-7-如何使用生成器函数实现可迭代对象?
来源:互联网 发布:狼道seo 编辑:程序博客网 时间:2024/06/05 01:04
- 创建List和generator的区别仅在于最外层的[]和()
- 如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator
- generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。
- 生成器既实现了迭代器接口,也实现了可迭代接口 。也就是说g.iter() is g
def f(): print('in f(),1') yield 1 print('in f(),2') yield 2 print('in f(),3') yield 3g = f()print(g.__next__())print(g.__next__())print(g.__next__())print(g.__next__())
第四次调用时,超出停止迭代异常。
不过呢,我们创建了一个generator后,基本上永远不会调用next(),因为太麻烦了。所以,通过for循环来迭代它,并且不需要关心StopIteration的错误。
g = f()for x in g: print(x)
print(g.__iter__() is g)返回true
解决方案:
iter在调用的时候并不会直接运行,而是返回一个包含next()方法的生成器对象。
class PrimeNumbers: def __init__(self,start,end): self.start = start self.end = end def isPrimeNum(self,k): if k < 2: return False for i in range(2,k): if k % i == 0: return False return True def __iter__(self): for k in range(self.start,self.end + 1): if self.isPrimeNum(k): yield kn = 0for x in PrimeNumbers(1,1235): print(x) n = n + 1print(n)
了解生成器可以看看廖老师的博客,很详细。
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014317799226173f45ce40636141b6abc8424e12b5fb27000
0 0
- python-7-如何使用生成器函数实现可迭代对象?
- python如何使用生成器函数实现可迭代对象
- 如何使用生成器函数实现可迭代对象
- python 3-3 如何使用生成器函数实现可迭代对象 __iter__,yield
- 3-3使用生成器函数实现可迭代对象
- Python迭代器,可迭代对象,生成器
- Python使用生成器实现生产者消费者模式
- Python可迭代对象,迭代器,生成器的区别
- Python 可迭代的对象、迭代器和生成器
- Python 可迭代的对象、迭代器和生成器
- python迭代,可迭代对象,生成器,迭代器--
- python 生成器函数
- Python 生成器函数_2
- Python函数之生成器
- Python 实现递归生成器
- python实现概率生成器
- Python 用一个生成器函数实现杨辉三角
- Python的生成器表达式与生成器函数
- nyoj_1063生活的烦恼(二叉树)
- 使用synchronized获取互斥锁的几点说明
- 构建微服务实验环境(一):容器与应用
- 用java生成一个表白二维码
- OSGI企业应用开发(六)细说Blueprint & Gemini Blueprint(一)
- python-7-如何使用生成器函数实现可迭代对象?
- Hibernate的一个注释 @Transient
- css3元素私有前缀及其用法
- CS107-Lecture 5-Note
- 清除eclipse中 Launch configuration的历史记录
- Quartz入门Demo(三)之TriggerListener 和 JobListener
- 美团二面
- hdu1080(带权值最长上升子序列)
- 分针网—IT教育: 调皮的JavaScript