假设我有一个纯函数,需要花费大量时间才能运行。 在主要内容中,我想多次使用相同的参数调用此函数。
我的最终问题是,我应该将返回值存储在变量中并使用它还是只是多次调用该函数?哪种方式需要较少的计算?
现代语言的编译器(如果有的话)是否能够判断某个函数是否纯粹?如果是,编译器是否能够优化同一块中的多个调用?如果是的话,那么调用这些函数比使用占位符变量更有意义(因为我会浪费计算来执行赋值/绑定名称)?
编辑:这是一个例子
if myPureFunction(a,b) == 1:
print(1)
elif myPureFunction(a,b) == 2:
print(2)
elif myPureFunction(a,b) == 3:
print(3)
else:
print(4)
VS
var = myPureFunction(a,b)
if var == 1:
print(1)
elif var == 2:
print(2)
elif var == 3:
print(3)
else:
print(4)
提前致谢。
答案 0 :(得分:1)
您的答案取决于编译器的优化。 如果函数'myPureFunction()'的主体位于相同的转换单元(您的C文件)中,则某些编译器可以对第一个示例执行优化,并将3x函数调用替换为仅一个。 但并非所有编译器都可以进行优化,第二种变体会更好。 我说过,因为我们的编译器(我在工作中实现)不能这样做=)
答案 1 :(得分:-1)
我认为您可能正在寻找的答案是递归。这意味着多次调用同一个函数,但它会在每个函数调用时解决问题。(但老实说,我并不完全理解你的实际问题是什么)
这是一个来自TheNewBoston的简单递归示例,它可以为您提供帮助。