首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Julia中函数中的函数

在Julia中函数中的函数
EN

Stack Overflow用户
提问于 2016-03-22 20:19:08
回答 2查看 6.8K关注 0票数 20

在朱莉娅,我有一个复杂的模拟函数,monte_carlo_sim(),涉及许多参数。在这个函数中,我需要调用许多其他函数。我可以在monte_carlo_sim()之外编写独立的函数,但是接下来我需要传递许多参数--其中许多参数在函数中是常量--这些参数将牺牲优雅和清晰(也许不会利用这些常量变量这一事实?)在功能中不包含函数是否有性能原因?作为一个玩具例子,温度T是恒定的,如果我不想把这个变量传递给我的函数compute_Boltzmann(),我可以这样做。这个有什么问题吗?

代码语言:javascript
复制
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函数之外作为这里吗?这样更好吗?不过,在这种情况下,我会传递比我需要的更多的信息。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-10 16:11:27

既然谷歌带领我来到这里,或许我要补充一条评论:

嵌套函数以前比较慢,例如参见github上的这一讨论 .2013年。但是现在没有了:在0.6版上运行测试,它们现在的速度都是一样的。

如果(像问题一样)内部函数隐式地依赖于在外部函数中定义的东西,如果它是一个独立的函数,就必须显式地传递它,这对我来说仍然是正确的。

票数 12
EN

Stack Overflow用户

发布于 2016-03-23 09:54:25

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

有关如何使用@time和编写高性能代码的更多信息,请阅读文章这里

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36164367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档