对于返回大d的函数需要延迟求值

2024-04-19 18:56:07 发布

您现在位置:Python中文网/ 问答频道 /正文

现在真的很想念哈斯克尔。你知道吗

我有这个密码:

for i in someFunc(arg0...argN):
    //some logic

问题是someFunc的返回值非常大,内存不足。你知道吗

我想我可以把它包装在一个生成器中,但这没有帮助,因为我不控制someFunc,也就是说:

def gen_someFunc(someFunc):
    for i in someFunc(arg0...argN):
        yield i

没有帮助,因为someFunc仍然是立即计算的。我怎样才能懒散地评估someFunc?你知道吗


Tags: in密码fordefsomegenyieldlogic
1条回答
网友
1楼 · 发布于 2024-04-19 18:56:07

在Python(或Haskell,这不是)中,不能对返回完全物化对象的函数进行延迟排队。在您使用函数之后,可能会发生懒惰,但是如果数据一次全部转储到您身上,您对此无能为力。你知道吗

也许有一些参数用于调用你还不知道的函数,这会让你懒散地评估它,但是我们从这里给出的信息中不知道这一点。你知道吗

如果可以在内存中保留对数据的初始调用,那么作为生成器调用它的Pythonic方法是

gen_some_func = iter(someFunc(arg0...argN))

不要写这个函数,然后再调用它。你知道吗

def gen_someFunc(someFunc):
    for i in someFunc(arg0...argN):
        yield i

相关问题 更多 >