我有一个函数收集额外的关键字参数使用...,所以就像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
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更好的方法来检查关键字参数a是否在,kwargs并获取现有关键字参数的值.
您只需传递kwargs给Dict构造函数即可获得kwargs的字典表示.例如:
kwargs_dict = Dict(kwargs)
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用命名关键字变量的默认值。默认值是一个特殊值(也称为哨兵值)。当用户提供一个值时,它会覆盖默认值,并且可以轻松检查这一点。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)
Run Code Online (Sandbox Code Playgroud)
给出功能:
julia> g(args=0, a=2)
true
julia> g(args=0)
false
Run Code Online (Sandbox Code Playgroud)
优点是第一速度 - 默认值关键字参数可以避免kwargs字典,如果可能的话,优化将删除整个字典设置代码。第二个优点可能是可读性(但根据每个人自己的口味)。
| 归档时间: |
|
| 查看次数: |
937 次 |
| 最近记录: |