一、生成器(generator)
在Python中,使用了yIEld的函数被称为生成器。
生成器是一种特殊的迭代器,只能用于迭代 *** 作。
生成器中保存的是算法,每次调用next(),就计算出下一个元素的值,直到计算到最后一个元素,没有更多元素时,抛出stopiteration异常。
不需要去创建一个完整而庞大的列表,一边循环一边计算,在数据量特别大的时候,能节约大量的内存。
生成器也是可迭代对象,正确方法是使用for循环来遍历,并且不需要去关心stopiteration异常的处理。
但是使用for循环遍历生成器时,拿不到生成器return的返回值。
如果想要拿到返回值,就必须得捕获stopiteration错误,然后取出错误实例中的value值。(try ..... except)
# -----------------------------------------# 生成器(generator):使用了yIEld的函数# -----------------------------------------# 偶数生成器def even(): print(‘2‘) yIEld 2 print(‘4‘) yIEld 4 print(‘6‘) yIEld 6 print(‘8‘) yIEld 8 return ‘OK‘# 生成一个生成器对象e = even()# 用while语句+next()方法遍历生成器while True: try: # 使用next生成并取出一个元素 print(‘while:‘,next(e)) except stopiteration as e: print(‘迭代结束!‘) # 生成器的返回值包含在stopiteration实例的value中 print(e.value) break# 用for...in语句遍历生成器for e in even(): print(‘for:‘,e)print()# 自定义一个生成器def my_yIEld(n): num = 0 while n > 0: num += 1 yIEld n * 2 n -= 1 return ‘生成了%d个值‘ % num# 用for...in语句遍历生成器for i in my_yIEld(5): print("for遍历值:",i)print()# 用while语句+next()方法遍历生成器yy = my_yIEld(5)while True: try: print("while遍历值:",next(yy)) except stopiteration as e: print(e.value) break总结
以上是内存溢出为你收集整理的python -- 生成器全部内容,希望文章能够帮你解决python -- 生成器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)