生成器一,简单spa
def demo(): for i in range(4): yield i g = demo() g1 = (i for i in g) g2 = (i for i in g1) print(list(g1)) print(list(g2))
生成器二,难一点的code
def add(n,i): return n+i def test(): for i in range(4): yield i g = test() for n in [1,10]: g = (add(n,i) for i in g) print(list(g)) print(list(g)) print(list(g))
def add(n,i): return n+i def test(): for i in range(4): yield i g = test() for n in [1,10,5]: g = (add(n,i) for i in g) print(list(g)) print(list(g)) print(list(g)) print(list(g))
分析简单一blog
def demo(): for i in range(4): yield i g = demo() g1 = (i for i in g) g2 = (i for i in g1) print(list(g1)) # 只有list之后才开始执行,以前都不执行, # 此时[0,1,2,3],g1再循环取值或list取值已经没法取到, # 生成器迭代器只能执行一次 for n in g1: print(n) print(list(g2))
分析二难一点class
def add(n,i): return n+i def test(): for i in range(4): yield i g = test() # for n in [1,10,5]: # n = 1 # g = (add(n,i) for i in test()) # n = 10 # g = (add(n,i) for i in (add(n,i) for i in test())) n = 5 g = (add(n,i) for i in (add(n,i) for i in (add(n,i) for i in test()))) print(list(g)) print(list(g))