python-15-生成器函数
生成器 #F44336 generator







def foo():
print(1)
yield 2 # 暂停当前函数执行
print(3)
yield 4
print(5)
return 6 # 函数返回,yield结束
yield 7


def counter():
i = 0
while True:
i += 1
yield i
def inr():
for x in counter():
yield x
g = inr()
next(g)





生成器的应用




def inc():
def counter():
i = 0
while True:
i += 1
yield i
c = counter()
def inner():
return next(c)
return inner
g =inc()
##########################
def inc():
def counter():
i = 0
while True:
i += 1
yield i
c = counter()
def inner():
return next(c)
return inner
g =inc()


斐波拉契数列


def fib():
a = 1
b = 1
while True:
yield i
a, b = b, a+b
g = fib()
for i in range(1,6):
print(i, next(g))
生成器交互






def inc():
def counter():
i = 0
while True:
i += 1
response = yield i
if response is not None:
i = response
c = counter()
# def inner(reset=False):
# return c.send(0) if reset else next(c)
# return inner
return lambda reset=False : c.send(0) if reset else next(c)
g =inc()
协程Coroutine

一个线程中交替执行


lambda 不支持 yield



def foo():
yield from [1, 2, 3, 4, 5]
# yield from range(5)
# for i in range(5):
# yield i

浙公网安备 33010602011771号