我有一个函数使用...
收集额外的关键字参数,所以它就像function f(args=0; kwargs...)
。我想检查是否有关键字参数,让'比如,a
存在kwargs
。
我所做的可能不是一种优雅的方式,我首先创建一个Dict
来存储关键字和相应的值kwargs_dict=[key=>value for (key, value) in kwargs]
,然后我使用haskey(kwargs_dict, :a)
来检查a
这是dict的关键。然后我通过kwargs_dict[:a]
得到它的价值。
function f(; kwargs...)
kwargs_dict = [key=>value for (key, value) in kwargs]
haskey(kwargs_dict, :a)
a_value = kwargs_dict[:a]
end
f(args=0, a=2)
> true
f(args=0)
> false
我想知道是否有更好的方法来检查关键字参数a
是否在kwargs
中并获取现有关键字参数的值。
答案 0 :(得分:6)
您可以将kwargs
传递给Dict
构造函数,以获取kwargs的字典表示。例如:
kwargs_dict = Dict(kwargs)
答案 1 :(得分:4)
另一种方法是使用命名关键字变量的默认值。默认值是一个特殊值(a.k.a sentinel值)。当用户提供值时,它会覆盖默认值,并且可以轻松检查。 nothing
是常用值。具体来说,对于问题中的示例:
julia> function g(; a = nothing, kwargs...)
kwargs_dict = [key=>value for (key, value) in kwargs]
a != nothing
end
g (generic function with 1 method)
提供功能:
julia> g(args=0, a=2)
true
julia> g(args=0)
false
优点是第一速度 - 默认值关键字参数可以避免kwargs
字典,如果可能,优化将删除整个字典设置代码。第二个优势可能是可读性(但是根据他自己的口味)。