首页 > 解决方案 > 嵌套收益率保留每个函数状态

问题描述

我有以下客户端界面:

for e in read_stream(): print(e)

其中 read_stream 控制要从无限流中获取的样本数并产生由所述流产生的值。这是我的应用程序的等效示例:

def foo():
    
    internal_state = 0
    
    while True:
        
        num = randint(0,100000)
        
        if num == 7:
            internal_state += 1
            print(internal_state)
            yield num
            
            
def read_stream():
    
    global max_reads
    for reads in range(0,max_reads):
        print("counter=", str(reads))
        num = foo()
        yield next(num)
        

问题是执行时read_stream(), read_stream() 内部变量被保留,但foo()变量被覆盖。

我知道更改接口可能是这里最明智的解决方案(取消中间人read_stream()),但是是否有可能以这样一种方式执行嵌套 yield 以使层次结构的所有级别都运行完整的周期而无需重置?

非常感谢。

标签: pythonstreamiterator

解决方案


推荐阅读