Julia中函数内部的函数

时间:2016-03-22 20:19:08

标签: julia

在Julia,我有一个复杂模拟函数,monte_carlo_sim()涉及许多参数。在这个函数里面,我需要调用很多其他函数。我可以在monte_carlo_sim()之外编写外的独立函数,但是我需要传递许多参数 - 其中许多参数在此函数中是不变的 - 这会牺牲优雅和清晰度(也许没有利用这些是常数变量的事实?)。是否存在不在函数中包含函数的性能原因?作为这里的玩具示例,温度T是常量,如果我不想将此变量传递给我的函数compute_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

或者,我可以定义一个新的const类型SimulationParameters,然后将其传递给compute_Boltzmann,并将compute_Boltzmann函数外部monte_carlo_sim写为here ?这是否更好?不过,我会传递的信息比我在这种情况下所需要的更多。

2 个答案:

答案 0 :(得分:3)

由于谷歌带我到这里,也许我添加评论:

嵌套函数过去比较慢,请参阅2013年github上的this discussion ...但不是更多:在v0.6上运行完全相同的测试,它们现在都是相同的速度。

如果(如问题)内部函数隐式地依赖于外部函数中定义的事物,那么对于我来说这仍然是正确的,如果它是独立函数则必须明确地传递。

答案 1 :(得分:2)

正如您所提到的,代码清晰度非常重要,因此您应该首先关注它。如果你觉得功能中的功能是你的风格,并帮助你(和你的同事)更好地理解你的脚本。 至于性能,您始终可以使用@time宏来比较这两种实现。我不希望看到你在功能实现中的功能受到影响,但总是值得检查。

有关如何使用@time和编写高性能代码的详细信息,请阅读文章here