朱莉娅:将Dict项作为参数传递给函数

时间:2019-11-17 15:04:26

标签: python function arguments julia

我正在尝试将Dict传递给Julia中的函数。 Dict包含参数名称对及其各自的值。假设我有一个函数f和一个Dict d:

julia> function f(x=10, y=10, z=10); return x^2, y^2, z^2; end
julia> d = Dict("x"=>3, "z"=>7, "y"=>5)

这将引发MethodError:

julia> f(d...)
ERROR: MethodError: no method matching ^(::Pair{String,Int64}, ::Int64)

我也尝试使用NamedTuple,但这似乎无济于事,因为它对元组中元素的顺序很敏感,并且它们的名称与函数参数名称不匹配:

julia> t = (x=3, z=7, y=5)
julia> f(t...)
(9, 49, 25)

我确信有办法做到这一点。是否尝试使用错误的类型执行此操作?在python中,我正在寻找的内容将如下所示:

>>> def f(x=10, y=10, z=10):
...     return x**2, y**2, z**2
>>> d = {'x':3, 'z':7, 'y':5}
>>> f(**d)
(9, 25, 49)

2 个答案:

答案 0 :(得分:7)

首先,由于您希望参数的名称很重要(关键字参数),因此需要在函数定义中使用;

f(;x=10, y=10, z=10) = x^2, y^2, z^2

第二,您应该使用键为Symbol的字典:

d = Dict(:x=>3, :z=>7, :y=>5)

第三,您想通过在;之后加上空格来表示关键字参数:

f(;d...)
# giving the result (9, 25, 49)

答案 1 :(得分:1)

看来您需要对字典的所有值进行平方。使用理解可能是更好的解决方案。

d = Dict(:x=>3, :z=>7, :y=>5)
[println(p.first, "=> ", p.second^2) for p in  d];

在上面,p.first 会得到键,而 p.second 会得到字典的值。