python -- 生成器

python -- 生成器,第1张

概述一、生成器(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
总结

以上是内存溢出为你收集整理的python -- 生成器全部内容,希望文章能够帮你解决python -- 生成器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1195711.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存