python是否在一个公式中多次重复计算函数值
在python中,如果我有一个函数 f(x)=(g(x)+1)(g(x)) g(x)是在之前定义的,需要时间来计算 像这样的东西python是否在一个公式中多次重复计算函数值,python,Python,在python中,如果我有一个函数 f(x)=(g(x)+1)(g(x)) g(x)是在之前定义的,需要时间来计算 像这样的东西 def g(x): return value def f(x): return (g(x)+1)*(g(x)) 当我计算f(x)时,python会在将g(x)代入方程时计算g(x)两次吗? 如果它计算了两次,人们通常如何在python中处理它 在将g(x)替换为 方程式 对。由于函数调用两次,因此将计算两次 人们通常如何在python中处理它 调用函数并存储
def g(x):
return value
def f(x):
return (g(x)+1)*(g(x))
当我计算f(x)时,python会在将g(x)代入方程时计算g(x)两次吗?
如果它计算了两次,人们通常如何在python中处理它
在将g(x)替换为
方程式
对。由于函数调用两次,因此将计算两次
人们通常如何在python中处理它
调用函数并存储值以供以后使用
def f(x):
value_g = g(x)
return (value_g+1) * (value_g)
在
g
中检查-打印某些内容很容易,并查看它被打印了多少次。无论如何,是的。它将调用
g
两次。我所知道的处理它的最好方法是创建一个等于方法返回值的局部变量,然后改用它
def f(x):
g_result = g(x)
return (g_result + 1) * g_result
根据函数
g(x)
,是的,每次调用时都会再次计算。对于给定的x
,记忆函数()只需计算一次值。例如:
def g(x):
if cache[x]:
return cache[x]
else:
result = # calculate g(x)
cache[x] = result
return cache[x] # or return result
我觉得你问题的第一部分得到了很好的回答,但关于: 人们通常如何在python中处理它 如果需要两次
函数
g(x)
的输出,只需将其存储在变量
中(至少对我而言)是有意义的。由于功能
应如何工作的性质(没有全局
影响,如时间
),相同的输入
应始终提供相同的输出
因此,假设这个函数
需要1
分钟来计算,如果我们想使用输出两次,那么调用它两次就没有意义了,因为它现在需要两倍的时间:2
分钟。如上所述,您可以使用memonization,也可以将g(x)
的输出存储在变量中
例如
您可以通过将print
调用放在g
中轻松找到这一点。是的,它将计算两次。您可以通过将结果存储在变量中来处理它。这不是Python特有的,但对所有编程语言都是通用的,不考虑编译器优化。如果您想让函数更像数学,可以记忆函数g
。@dabadaba:Editedcalculate g(x)
应该被注释。编辑以添加注释这个想法是可以理解的,但是由于无限递归,您需要以不同的方式计算值(比如缓存[x]=\u g(x)
其中\u g
是原始函数)。编辑以避免在g(x)上递归
def g(x):
if cache[x]:
return cache[x]
else:
result = # calculate g(x)
cache[x] = result
return cache[x] # or return result
def f(x):
gx = g(x)
return: (gx+1) * gx