【问题标题】:How to pass a Dict to a function with Keyword arguments?如何将字典传递给带有关键字参数的函数?
【发布时间】:2021-12-06 08:06:24
【问题描述】:

假设我有这个Dict

d=Dict("arg1"=>10,"arg2"=>20)

还有这样的功能:

function foo(;arg1,arg2,arg3,arg4,arg5)
  #Do something
end

如何调用函数并将Dictd 中的参数作为函数的参数传递? 我知道我可以做到:

foo(arg1=d["arg1"],arg2=d["arg2"])

但是有什么方法可以自动执行此操作吗?我的意思是一种找出 Dict 中定义了哪些参数并将其自动传递给函数的方法。

【问题讨论】:

    标签: function dictionary julia mapping


    【解决方案1】:

    带有Symbol键的字典可以直接splatted进入函数调用:

    julia> d = Dict(:arg1 => 10, :arg2 => 12)
    Dict{Symbol, Int64} with 2 entries:
      :arg1 => 10
      :arg2 => 12
    
    julia> f(; arg1, arg2) = arg1 + arg2
    f (generic function with 1 method)
    
    julia> f(; d...)
    22
    

    注意函数调用中的分号,它确保d 中的元素被解释为关键字参数,而不是恰好是Pairs 的位置参数。

    【讨论】:

    • 请注意,分号对于被解释为关键字参数很重要
    • 流畅的 splatting 是 Julia 最令人惊奇的事情之一。了解非常重要。
    猜你喜欢
    • 2010-09-24
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多