Julia函数中的函数
在Julia中,我有一个用于复杂模拟的函数,Julia函数中的函数,julia,Julia,在Julia中,我有一个用于复杂模拟的函数,monte\u carlo\u sim(),它涉及许多参数。在这个函数中,我需要调用许多其他函数。我可以在monte_carlo_sim()之外编写独立函数,但随后我需要传递许多参数——其中许多参数在该函数中是常量——这将牺牲优雅性和清晰性(可能不会利用这些是常量变量的事实?)。是否存在不在函数中包含函数的性能原因?作为这里的一个玩具示例,温度T是恒定的,如果我不想将这个变量传递给我的函数compute\u Boltzmann(),我可以执行以下操作。
monte\u carlo\u sim()
,它涉及许多参数。在这个函数中,我需要调用许多其他函数。我可以在monte_carlo_sim()
之外编写独立函数,但随后我需要传递许多参数——其中许多参数在该函数中是常量——这将牺牲优雅性和清晰性(可能不会利用这些是常量变量的事实?)。是否存在不在函数中包含函数的性能原因?作为这里的一个玩具示例,温度T
是恒定的,如果我不想将这个变量传递给我的函数compute\u Boltzmann()
,我可以执行以下操作。这有什么问题吗
function monte_carlo_sim(temp::Float64, N::Int)
const T = temp
function compute_Boltzmann(energy::Float64)
return exp(-energy/T)
end
# later call this function many times
for i = 1:1000
energy = compute_energy()
b = compute_Boltzmann(energy)
end
end
或者,我可以定义一个新的常量类型
SimulationParameters
,并将其传递给compute\u Boltzmann
,然后将compute\u Boltzmann
写入monte\u carlo\u sim
函数之外?这样更好吗?不过,在这种情况下,我会传递比我需要的更多的信息。正如您所提到的,代码的清晰性非常重要,因此您应该首先关注这一点。如果您觉得函数中的函数是您的风格,并且有助于您(和您的同事)更好地理解脚本。
至于性能,您始终可以使用@time
宏比较这两种实现。我不希望看到函数实现中的函数受到影响,但这总是值得检查的
有关如何使用
@time
和编写高性能代码的更多信息,请阅读本文 既然谷歌把我带到了这里,也许我要添加一条评论:
嵌套函数过去速度较慢,请参见github上的示例。。。2013年。但不再是了:在v0.6上运行完全相同的测试,它们现在都是相同的速度
对于我来说,如果(像问题一样)内部函数隐式地依赖于外部函数中定义的事物,那么这仍然是正确的,如果它是一个独立函数,则必须显式地传递外部函数 谷歌也把我带到了这里,正是因为嵌套函数对我的性能有很大的影响。这可能是因为嵌套函数返回多个参数。