Function 朱莉娅:效率和指示参数类型
关于指定函数参数和输出的类型,我有三个相关的问题。我定义了一个函数f,我希望调用多次,所以我希望尽可能提高效率。我的函数定义如下所示:Function 朱莉娅:效率和指示参数类型,function,methods,types,julia,Function,Methods,Types,Julia,关于指定函数参数和输出的类型,我有三个相关的问题。我定义了一个函数f,我希望调用多次,所以我希望尽可能提高效率。我的函数定义如下所示: function f(x, y) ... return z end 我知道x将是一个数组{Float64,1},y将是一个数组{Float64,2},z将是一个Float64 我的问题是: 指定输入类型是否有效率优势 在函数定义中,即函数f(x::Array{Float64},y::Array{Float64}) 通过指定x是一维的而y是二维的
function f(x, y)
...
return z
end
我知道x
将是一个数组{Float64,1},y
将是一个数组{Float64,2},z
将是一个Float64
我的问题是:
函数f(x::Array{Float64},y::Array{Float64})
x
是一维的而y
是二维的,即函数f(x::Array{Float64,1},y::Array{Float64,2})
,使类型更加具体,还有什么好处吗z
的类型,即函数f(x::Array{Float64,1},y::Array{Float64,2})::Float64
,是否有任何效率优势非常感谢!如果这些问题以前已经解决过,请道歉。。Julia的美妙之处在于它的编译器能够很好地为您快速地解决这些问题。这里是寻找如何编写高效代码的最佳场所,比如确保您的函数是有效的。对于代码的人类读者来说,这是一个巨大的好处。考虑第一次人类阅读的差异(或者在离代码很长一段时间之后): vs
如果要这样做,至少应该给出不会过度压缩函数的类型注释(例如
函数f(x::AbstractVector,y::AbstractMatrix)
)。否则,您的函数将无法与其他元素类型一起工作,这可能非常有用。人类在“动态地解决这些问题”方面不如编译器。对于一个非常重要的项目,将有多人试图理解代码库。这几乎像是支持f的论点(x,y)
。这非常容易阅读。记录函数参数的更好方法是使用。正如@OscarSmith提到的,很容易意外地过度限制函数的输入和输出类型。当然,f(x)
更容易阅读(哦,顺便说一句,x是tupletuple{x::Array{Float64,1},y::Array){Float64,2}
)。理解有点困难。函数参数注释用于方法分派,而不是文档。docstring用于文档。有一个小问题-指定函数参数类型的方式可能会影响编译时间。
function f(x, y)
function f(x::Array{Float64}, y::Array{Float64})::Float64