gpt4 book ai didi

Python:从函数内部重新定义函数

转载 作者:太空宇宙 更新时间:2023-11-03 12:15:35 25 4
gpt4 key购买 nike

我有一些昂贵的函数 f(x),我只想计算一次,但被调用得相当频繁。本质上,第一次调用该函数时,它应该为 x 的范围计算一大堆值,因为它无论如何都会被积分,然后用样条插值那个值,并以某种方式缓存系数,可能在一个文件中用于进一步使用。

我的想法是做类似下面的事情,因为它很容易实现。第一次调用该函数时,它会做一些事情,然后重新定义自己,然后再做一些其他事情。但是,它不会按预期工作并且通常可能是不好的做法。

def f():
def g():
print(2)
print(1)
f = g
f()
f()

预期输出:

1
2

实际输出:

1
1

在 f() 之外定义 g() 没有帮助。为什么这不起作用?除此之外,我现在能想到的唯一解决方案是使用一些全局变量。或者以某种方式为此编写一个类是否有意义?

最佳答案

这太复杂了。相反,使用内存:

def memoized(f):
res = []
def resf():
if len(res) == 0
res.append(f())
return res[0]
return resf

然后简单地

@memoized
def f():
# expensive calculation here ...
return calculated_value

在 Python 3 中,您可以将 memoized 替换为 functools.lru_cache .

关于Python:从函数内部重新定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6401640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com