python-15-生成器函数

生成器 #F44336 generator

enter description here

enter description here
enter description here

enter description here
enter description here
enter description here
enter description here

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

enter description here

计数器

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

enter description here
enter description here

enter description here
enter description here
enter description here

生成器的应用

enter description here

enter description here

enter description here

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

计数器
enter description here

斐波拉契数列
enter description here
enter description here

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

生成器交互

enter description here
enter description here

enter description here
enter description here

enter description here
enter description here

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

enter description here

一个线程中交替执行
enter description here

enter description here

lambda 不支持 yield
enter description here
enter description here
enter description here

def foo():
    yield from [1, 2, 3, 4, 5]
#     yield from range(5)
#     for i in range(5):
#         yield i
posted @ 2022-04-22 09:58  何时&明月  阅读(38)  评论(0)    收藏  举报