1.生成器的使用场景循环生成数据一次性

1. 生成器简介

根据程序员制定的规则循环生成数据中文关键词生成器,不满足条件时数据的生成结束。数据并不是一次全部生成和处理,而是一个用一个又一个生成,这样可以节省大量内存。

2. 生成器的创建方式生成器理解yield关键字

生成器理解:

# 创建生成器
my_generator = (i * 2 for i in range(5))
print(my_generator)
# next获取生成器下一个值
# value = next(my_generator)
# print(value)
# 遍历生成器
for value in my_generator:
    print(value)

代码说明:

运行结果:

 at 0x101367048>
0
2
4
6
8

产量关键字:

图片[1]-1.生成器的使用场景循环生成数据一次性-老王博客

def mygenerater(n):
    for i in range(n):
        print('开始生成...')
        yield i
        print('完成一次...')
if __name__ == '__main__':
    g = mygenerater(2)
    # 获取生成器中下一个值
    # result = next(g)
    # print(result)
    # while True:
    #     try:
    #         result = next(g)
    #         print(result)
    #     except StopIteration as e:
    #         break
    # # for遍历生成器, for 循环内部自动处理了停止迭代异常,使用起来更加方便
    for i in g:
        print(i)

代码说明:

运行结果:

开始生成...
0
完成一次...
开始生成...
1
完成一次...

3. 生成器使用场景

数学中有一个著名的斐波那契数列。序列中的第一个数字是0中文关键词生成器,第二个数字是1,后面的每个数字都可以通过前两个数字相加得到:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, …

现在我们使用生成器来实现这个斐波那契数列。每次取值,通过算法生成下一个数据。生成器每次调用只生成一个数据,可以节省大量内存。

def fibonacci(num):
    a = 0
    b = 1
    # 记录生成fibonacci数字的下标
    current_index = 0
    while current_index < num:
        result = a
        a, b = b, a + b
        current_index += 1
        # 代码执行到yield会暂停,然后把结果返回出去,下次启动生成器会在暂停的位置继续往下执行
        yield result
fib = fibonacci(5)
# 遍历生成的数据
for value in fib:
    print(value)

运行结果:

0
1
1
2
3

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论