我想创建一个返回生成器exp的函数。 我试着做这样的事情:
return (f(value) value=f(value) for i in itertools.count(1))
但它不起作用。 我希望每个下一步的值都是值接收最后一个值。 f这是对值进行一些计算的函数。
好的我有功能:
def f(num):
return num*num
我想创建返回生成器表达式的新函数。 像这样的东西:
def genE(f,value)
return (f(value) value=f(value) for i in itertools.count(1))
所以如果我打电话给genE:
for i in genE(f,3):
print (i)
它将打印3 9 81 81 ^ 2 ... 函数f可以是另一个函数 [value,f(value),f(f(value)),f(f(f(value)))...]
答案 0 :(得分:1)
并不完全清楚你的意思。你有一个价值:
value = ...
和一个功能:
def f (value):
...
并且您想要返回一个新列表:
[value, f(value), f(f(value)), f(f(f(value)))...]
所以我认为你想要的(列表长度为i
)是......
def g (value, i):
if i > 0:
yield value
g(f(value), i-1)
答案 1 :(得分:0)
不要使用生成器表达式,使用生成器函数:
def iterate(f, value):
while True:
yield value
value=f(value)
yield
关键字标记值“生成”的点。调用iterate
时,它将返回一个生成器对象。
您可能希望阅读有关fixed point combinators及相关主题的内容,因为您对此类内容有很多了解。
这里正在使用:
import itertools
powers = iterate(lambda n:n*n, 3)
list(itertools.takewhile(lambda n: n <= 30000, powers))
#=>[3, 9, 81, 6561]