Python学习笔记 - 生成器generator

来源:互联网 发布:洋葱新闻 知乎 编辑:程序博客网 时间:2024/06/08 05:21

#!/usr/bin/env python3# -*- coding: utf-8 -*-# generator 生成器L = [x * x for x in range(10)]print(L)# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]g = (x * x for x in range(10))print(g)# <generator object <genexpr> at 0x00000000028F0120>print(next(g))print(next(g))print(next(g))print(next(g))print(next(g))print(next(g))print(next(g))print(next(g))print(next(g))print(next(g))'''0149162536496481'''# print(next(g))'''Traceback (most recent call last):  File "E:\Code\python\learn\generator.py", line 23, in <module>    print(next(g))StopIteration'''# 上面这种调用方法太变态了# 正确的使用for循环g = (x * x for x in range(10))for n in g:print(n)'''0149162536496481'''def fib(max):n, a, b = 0, 0, 1while n < max:print(b)a, b = b, a + b # 注意这里n = n + 1return 'done'fib(6)'''112358'done''''def fib(max):n, a, b = 0, 0, 1while n < max:yield b a, b = b, a + bn = n + 1return 'done'# 如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数# 而是一个generatorf = fib(6)f# <generator object fib at 0x00000000022011F8>def odd():print('step 1')yield 1print('step 2')yield(3)print('step 3')yield(5)'''>>> o = odd()>>> next(o)step 11>>> next(o)step 23>>> next(o)step 35'''for n in fib(6):print(n)# 练习 - 杨辉三角def triangles():a = [1];while True:yield aa = [sum(i) for i in zip([0] + a, a + [0])]n = 0for t in triangles():print(t)n = n + 1if n == 10:break'''[1][1, 1][1, 2, 1][1, 3, 3, 1][1, 4, 6, 4, 1][1, 5, 10, 10, 5, 1][1, 6, 15, 20, 15, 6, 1][1, 7, 21, 35, 35, 21, 7, 1][1, 8, 28, 56, 70, 56, 28, 8, 1][1, 9, 36, 84, 126, 126, 84, 36, 9, 1]'''




5 1
原创粉丝点击