Julia:写一个函数 "paramvalues" 是 returns 一个参数值字典
Julia: Writing a function "paramvalues" that returns a dictionary of parameter values
我正在做一项经济学作业,需要在 Julia 中创建一个函数,该函数接受关键字参数并 returns 它们以字典的形式出现。到目前为止这是我的代码,但它不是 运行 因为没有匹配 getindex(::Nothing, ::Symbol) 的方法。
function paramvalues(a; Nb = 100, Ns = 100, Minval = 0, Maxval = 200, Mincost = 0, Maxcost = 200)
d = Dict(:Nb => Nb, :Ns => Ns, :Minval => Minval, :Maxval => Maxval, :Mincost => Mincost, :Maxcost => Maxcost)
for values in a
d[values] = get(d, values, 0)
end
d
end
这可能更接近你想要的:
function paramvalues(a; kwargs...)
@show kwargs
dict = collect(kwargs)
@show dict
return dict
end
这里的神奇之处在于 kwargs
(又名关键字参数)和 ...
“SLURP”,将所有关键字参数吸收到一个变量中。
它是对数组的迭代器。要将迭代器转换为标准集合,如 Array
或 Dict
,您可以使用 collect
。对上的迭代器变成 Dict
.
尝试一下我明白了:
paramvalues(123;Nb = 100, Ns = 100, Minval = 0, Maxval = 200, Mincost = 0, Maxcost = 200)
kwargs = Base.Iterators.Pairs(:Nb => 100,:Ns => 100,:Minval => 0,:Maxval => 200,:Mincost => 0,:Maxcost => 200)
dict = Pair{Symbol,Int64}[:Nb => 100, :Ns => 100, :Minval => 0, :Maxval => 200, :Mincost => 0, :Maxcost => 200]
6-element Array{Pair{Symbol,Int64},1}:
:Nb => 100
:Ns => 100
:Minval => 0
:Maxval => 200
:Mincost => 0
:Maxcost => 200
我不知道 a
应该是什么。
听起来您的错误是由于对存储 Nothing
的变量调用 get
而不是存储 Dict
.
同样在遍历字典时,returns (key, value)
的元组对。所以用这样的东西来遍历字典:
for (k,v) in my_dict
@show k,v
end
另外不要忘记在 julia repl 中使用 ?
并搜索其中的一些内容。像 ?Dict
或 ?for
或 ?enumerate
或 ?@show
或 ?collect
.
Dict
可以直接取关键字参数:
julia> f(;kw...) = Dict(kw)
f (generic function with 1 method)
julia> f(a=5, b=3)
Dict{Symbol, Int64} with 2 entries:
:a => 5
:b => 3
我正在做一项经济学作业,需要在 Julia 中创建一个函数,该函数接受关键字参数并 returns 它们以字典的形式出现。到目前为止这是我的代码,但它不是 运行 因为没有匹配 getindex(::Nothing, ::Symbol) 的方法。
function paramvalues(a; Nb = 100, Ns = 100, Minval = 0, Maxval = 200, Mincost = 0, Maxcost = 200)
d = Dict(:Nb => Nb, :Ns => Ns, :Minval => Minval, :Maxval => Maxval, :Mincost => Mincost, :Maxcost => Maxcost)
for values in a
d[values] = get(d, values, 0)
end
d
end
这可能更接近你想要的:
function paramvalues(a; kwargs...)
@show kwargs
dict = collect(kwargs)
@show dict
return dict
end
这里的神奇之处在于 kwargs
(又名关键字参数)和 ...
“SLURP”,将所有关键字参数吸收到一个变量中。
它是对数组的迭代器。要将迭代器转换为标准集合,如 Array
或 Dict
,您可以使用 collect
。对上的迭代器变成 Dict
.
尝试一下我明白了:
paramvalues(123;Nb = 100, Ns = 100, Minval = 0, Maxval = 200, Mincost = 0, Maxcost = 200)
kwargs = Base.Iterators.Pairs(:Nb => 100,:Ns => 100,:Minval => 0,:Maxval => 200,:Mincost => 0,:Maxcost => 200)
dict = Pair{Symbol,Int64}[:Nb => 100, :Ns => 100, :Minval => 0, :Maxval => 200, :Mincost => 0, :Maxcost => 200]
6-element Array{Pair{Symbol,Int64},1}:
:Nb => 100
:Ns => 100
:Minval => 0
:Maxval => 200
:Mincost => 0
:Maxcost => 200
我不知道 a
应该是什么。
听起来您的错误是由于对存储 Nothing
的变量调用 get
而不是存储 Dict
.
同样在遍历字典时,returns (key, value)
的元组对。所以用这样的东西来遍历字典:
for (k,v) in my_dict
@show k,v
end
另外不要忘记在 julia repl 中使用 ?
并搜索其中的一些内容。像 ?Dict
或 ?for
或 ?enumerate
或 ?@show
或 ?collect
.
Dict
可以直接取关键字参数:
julia> f(;kw...) = Dict(kw)
f (generic function with 1 method)
julia> f(a=5, b=3)
Dict{Symbol, Int64} with 2 entries:
:a => 5
:b => 3