加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读