我正在使用julia脚本,其中定义了两个需要共享变量的函数。最佳做法是什么?我应该只使用全局变量,还是可以使用朱莉娅特定的解决方法?
通常,您会按照Benoit的建议将变量传递给两个函数。
但是,如果出于某种原因需要避免使用它,通常是这种情况,例如,当将函数传递给应该依赖于某些外部参数的优化例程时,请使用闭包而不是使用全局变量。通常const
,出于性能原因,在Julia中应避免使用非全局变量。
这是一个例子:
没有关闭:
julia> using Optim, BenchmarkTools
julia> c = 10
10
julia> f(x) = (x-c)^2
f (generic function with 1 method)
julia> @btime optimize(f, -100, 100);
5.500 μs (235 allocations: 3.81 KiB)
现在与关闭相同。首先我使用let
:
julia> @btime let c = 10
f(x) = (x-c)^2
optimize(f, -100, 100)
end;
139.605 ns (2 allocations: 176 bytes)
您还可以使用一个函数:
julia> function wrap()
c = 10
f(x) = (x-c)^2
optimize(f, -100, 100)
end
wrap (generic function with 1 method)
julia> @btime wrap();
139.100 ns (2 allocations: 176 bytes)
此外,如果c
是一个const
事情会也快(启动此一新的朱莉娅会话):
julia> using Optim, BenchmarkTools
julia> const c = 10
10
julia> f(x) = (x-c)^2
f (generic function with 1 method)
julia> @btime optimize(f, -100, 100);
138.603 ns (2 allocations: 176 bytes)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句