是否有一种允许函数忽略不受支持的关键字参数的好方法?
fopts = [:kw1]
opts = Dict(:kw1=>:symb1, :kw2=>:symb2)
function f(; kw1 = :symb)
return kw1
end
Run Code Online (Sandbox Code Playgroud)
f(;opts...)
会抛出一个 METHOD ERROR
我可以把它包装成这样的东西,但是我还需要知道哪些kwargs f
会支持?
function f2(fopts; kwargs)
f(; Dict(key=>get(opts, key, 0) for key in fopts)...)
end
Run Code Online (Sandbox Code Playgroud)
我错过了解决这个问题的方法.如果存在性能损失,那就不是那么好了,因为我想他们可能需要进行某种查询.是否有一种很好的方式来询问kwargs以f
编程方式接受的内容?
如何在Julia的单个脚本中使用同一模块的多个不同版本或分支?
例如,如果我想对每个标记版本进行基准测试.
(有人最近问了一个类似的问题,我回答错了,但不过这可能有用.)
编辑:我自己已经回答了这个问题,但我相信他们可能会有更好的方式!
我想将一组函数应用于值并获取一组值作为输出.我在help?> groupby
(DataFrames包)中看到我们可以做到:
> df |> groupby(:a) |> [sum, length]
> df |> groupby([:a, :b]) |> [sum, length]
Run Code Online (Sandbox Code Playgroud)
但我们能做到吗
> [sum, length](groupby([:a, :b]))
MethodError: objects of type Array{Function,1} are not callable
square brackets [] for indexing an Array.
eval_user_input(::Any, ::Base.REPL.REPLBackend) at ./REPL.jl:64
in macro expansion at ./REPL.jl:95 [inlined]
in (::Base.REPL.##3#4{Base.REPL.REPLBackend})() at ./event.jl:68
Run Code Online (Sandbox Code Playgroud)
甚至
> [sum, length](1:5)
Run Code Online (Sandbox Code Playgroud)
我期待输出:
[15, 5]
Run Code Online (Sandbox Code Playgroud) 有没有一个很好的方法来获取当前系统信息在朱莉娅(我的用例在这里是内存,但也基本上感兴趣的任何信息,我可以从top
Linux上运行).
这就是我现在所拥有的:(基本上只是得到`free -m`的输出)< - 我无法让这个让我逃避反引号并保持代码突出显示...
import Base.DataFmt: readdlm_string, invalid_dlm
"""
getmeminfo()
Returns (in MB) A tuple of containing:
- Memory(total, used, buffer, available)
- Swap(total, used, free)
"""
function getmeminfo()
memstats = readdlm_string(readstring(`free -m`),invalid_dlm(Char), Int, '\n', true, Dict())
return Tuple{Array{Int,1},Array{Int,1}}((memstats[2,[2;3;6;7]], memstats[3,[2;3;4]]))
end
Run Code Online (Sandbox Code Playgroud)
基地还有什么更好的想法吗?
我需要在Julia中找到小于给定数字的下两个幂.
即smallerpoweroftwo(15)
应该返回,8
但smallerpoweroftwo(17)
应该返回16
到目前为止,我有这个,但搜索一串比特对我来说似乎有点笨拙.也许它不...任何想法?
function smallerpoweroftwo(n::Int)
2^(length(bits(n)) - search(bits(n), '1'))
end
Run Code Online (Sandbox Code Playgroud)
谢谢!
编辑:我主要想的是使用按位算法有更优雅的方法来做到这一点.或者在某些其他语言中是否存在位长函数?
.jld
除了将其全部读取然后用额外的变量重写之外,还有一种更聪明的方法将变量添加到文件中吗?我认为使用hdf5可以实现,但我可以找到它是否已在JLD包中实现。
这就是我目前的做法。
using JLD
if isfile(filename)
a = load(filename) #load all vars
jldopen(filename, "w") do file
for (k,v) in a #rewrite original vars
write(file, k, v)
end
write(file, "additional_variable", add_var) #write new var
end
end
Run Code Online (Sandbox Code Playgroud)