Skip to main content
 首页 » 编程设计

不使用 yield 的 python 生成器无尽的流

2025年05月04日14langtianya

我试图在给定函数 f 和初始值 x 的情况下生成无穷无尽的结果流 所以第一次调用应该给出初始值,第二次调用应该给出 f(x),第三次调用是 f(x2) 而 x2 是 f(x) 的前一个结果等等..

我想出了什么:

def generate(f, x):  
   return itertools.repeat(lambda x: f(x)) 

这似乎不起作用。有任何想法吗? (我不能在我的代码中使用 yield )。我也不能使用超过 1 行代码来解决这个问题。任何帮助将不胜感激。

还请注意,在之前的 ex 中。我被要求使用产量。没有问题:

while True: 
    yield x 
    x = f(x) 

这很好用。但是现在..不知道如何做没有

请您参考如下方法:

在 Python 3.3 中,您可以使用 itertools.accumulate:

import itertools 
 
def generate(f, x): 
  return itertools.accumulate(itertools.repeat(x), lambda v,_:f(v)) 
 
for i, val in enumerate(generate(lambda x: 2*x, 3)): 
  print(val) 
  if i == 10: 
    break