如何重用函数的输出? [复制]

Posted

技术标签:

【中文标题】如何重用函数的输出? [复制]【英文标题】:How to reuse an output of a function? [duplicate] 【发布时间】:2021-02-13 22:39:53 【问题描述】:

我正在尝试在其他函数中重用一个耗时函数的输出,而无需再次重新运行它。 示例:

%%time
def func1():
    sleep(100)
    y = 123
    return y
func1()

持续时间:100 秒

%%time 
def func2():
    x = func1()
    return x
func2()

持续时间:100 秒

我希望 func2 重用 fun1 的输出,而无需再次等待另一个 100。 在此先感谢:)

【问题讨论】:

【参考方案1】:

您可以使用functools.lru_cache 执行任务:

from time import sleep
from functools import lru_cache

@lru_cache
def func1():
    sleep(3)
    y = 123
    return y

print(func1())  # <-- this waits 3 seconds
print(func1())  # <-- this is printed immediately

【讨论】:

这似乎是满足我需求的一个很好的解决方案。谢谢!但是如果函数不纯,最好的选择是什么?假设每次 x 运行我需要接收不同的输出?因为在脚本终止并重新启动之前,lru_cache 不会被更改,对吗? @mor2778 lru_cache 根据函数参数缓存函数。所以如果你给你的函数提供不同的参数,它会沿着这个参数缓存输出。 知道了。非常感谢您。我将开始深入挖掘 lur_cache :)

以上是关于如何重用函数的输出? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何制作可用于可查询的可重用条件? [复制]

如何对函数的输出使用索引? [复制]

如何在节点 js 的库中收集用户定义的函数? [复制]

R:如何让用户定义的函数返回多个输出? [复制]

鉴于我可以访问 R 的“摘要”输出,如何在 Excel 中复制 R 的预测函数

在 Google AdWords 中创建可重用函数