标签:完成 数学 方式 取值 表示 条件 == for exp
根据程序员制定的规则循环生成数据,当条件不成立时则生成数据结束。数据不是一次性全部生成出来,而是使用一个,再生成一个,可以节约大量的内存。
生成器推导式:
# 创建生成器 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)
代码说明:
运行结果:
<generator object <genexpr> at 0x101367048>
0
2
4
6
8
yield 关键字:
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 完成一次...
数学中有个著名的斐波拉契数列(Fibonacci),数列中第一个数为0,第二个数为1,其后的每一个数都可由前两个数相加得到:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
现在我们使用生成器来实现这个斐波那契数列,每次取值都通过算法来生成下一个数据, 生成器每次调用只生成一个数据,可以节省大量的内存。
def fib_loop(n): a, b = 0, 1 for i in range(n + 1): a, b = b, a + b yield a f = fib_loop(5) print(f) print(next(f)) for value in f: print(value)
标签:完成 数学 方式 取值 表示 条件 == for exp
原文地址:https://www.cnblogs.com/tracydzf/p/12623126.html