python - Julia:将 Dict 项作为参数传递给函数
问题描述
我正在尝试将 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)
解决方案
首先,由于您希望参数的名称很重要(关键字参数),您需要;
在函数定义中使用 a :
f(;x=10, y=10, z=10) = x^2, y^2, z^2
其次,您应该使用键为Symbol
s 的字典:
d = Dict(:x=>3, :z=>7, :y=>5)
第三,你想通过 splatting after 来表明你正在 splatting 关键字参数;
:
f(;d...)
# giving the result (9, 25, 49)
推荐阅读
- python - 一切都导致 else 而不是读取输入
- excel - 在 Excel 中使用命名范围作为电子邮件列表
- android - 如何从命令行为 Android 编译 C++
- c++ - 包装类的静态成员变量的简单方法
- sql - TFS2018 构建定义保存错误 - 名称为 %counterName="BuildFolderId";% 的计数器不存在
- c++ - 未定义对“EVP_sha3_256”的引用
- python - 从 x,y 数组中提取并打印 x,y 坐标,其中 y 在两个预定义值之间
- python - 更改 Keras 中的输入大小
- sql - 带总和的 SQL 双枢轴
- javascript - Javascript DataTables columnDefs 数组中的可见目标