绕死你的生成器
生成器一,简单
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))
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
生成器二,难一点的
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))
分析简单一
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))
分析二难一点
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))

更多精彩