生成器一,简单

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))

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄