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