python-7-如何使用生成器函数实现可迭代对象?
2017-05-02 17:11
971 查看
创建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 3 g = 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 k n = 0 for x in PrimeNumbers(1,1235): print(x) n = n + 1 print(n)
了解生成器可以看看廖老师的博客,很详细。
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014317799226173f45ce40636141b6abc8424e12b5fb27000
相关文章推荐
- python如何使用生成器函数实现可迭代对象
- 如何使用生成器函数实现可迭代对象
- python_如何使用生成器实现可迭代对象?
- python使用生成器实现可迭代对象
- 3-3使用生成器函数实现可迭代对象
- python_如何实现可迭代对象和迭代器对象?
- 学python(03)—— 如何使用函数实现一个随机字符串里的大小写字符互换
- python 3-2 如何实现可迭代对象和迭代器对象(2) BookIterable/BookIterator
- python-6-如何实现可迭代对象和迭代器对象?
- python 3-1 如何实现可迭代对象iterable和迭代器对象iterator,__iter__,__getitem__
- Python:使用threading模块实现多线程编程三[threading.Thread类的重要函数]
- Python中如何避免使用多个分支语句(多个if和else)——函数字典(Function Map)简介
- 使用python实现strcmp函数功能示例
- 这篇文章主要介绍了Python使用函数默认值实现函数静态变量的方法,是很实用的功能
- Python def函数的定义、使用及参数传递实现代码
- 如何使用ctags实现vim编辑器中的变量或函数追踪
- 如何使用Criteria 实现两表的左外连接,返回根对象
- Python def函数的定义、使用及参数传递实现代码
- python中getattr函数使用方法 getattr实现工厂模式
- Python使用函数默认值实现函数静态变量的方法