python -- 生成器
发布时间:2020-12-20 12:58:56 所属栏目:Python 来源:网络整理
导读:一、生成器(generator) 在Python中,使用了 yield 的函数被称为生成器。 生成器是一种特殊的迭代器,只能用于迭代操作。 生成器中保存的是算法,每次调用next(),就计算出下一个元素的值,直到计算到最后一个元素,没有更多元素时,抛出StopIteration异常
一、生成器(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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |