创建生成器的两种方式:

1.列表生成式

2.yield

###################################################

输入:
def foo():
print('ok')
yield 1
print('alright')
yield 2

g=foo()
next(foo())
next(foo())
next(foo())
next(foo())
next(g)
next(g)

################################
s = (x for x in range(5))
print(next(s)) #输出0

for i in s: #因为上面用next已经生成了0,所以这里的for输出1至4
print(i)
输出:

ok    #由next(foo())得到
ok    #由next(foo())得到
ok    #由next(foo())得到
ok    #由next(foo())得到
ok    #由next(g)得到
alright    #由next(g)得到
0        #由next(s)得到
1        #由for里的print(i)得到
2        #由for里的print(i)得到
3        #由for里的print(i)得到
4        #由for里的print(i)得到

###################################################

从输出看出,如果要foo从yield 1 到yield 2一直生成下去,要将函数foo()赋值给一个变量g,然后next(g)而不能直接next(foo())

posted on 2021-12-05 11:18  csy113  阅读(33)  评论(0)    收藏  举报