我是朱莉娅的新手.我主要在python中编程.
在python中,如果要迭代一大组值,通常会构造一个所谓的生成器来节省内存使用量.这是一个示例代码:
def generator(N):
for i in range(N):
yield i
Run Code Online (Sandbox Code Playgroud)
我想知道朱莉娅是否有类似的东西.阅读julia手册后,@ task macro似乎与python中的生成器具有相同(或类似)的功能.然而,经过一些实验,在julia中,内存使用量似乎比通常的数组大.
我@time在IJulia中使用来查看内存使用情况.这是我的示例代码:
[更新]:添加generator方法代码
(generator方法)
function generator(N::Int)
for i in 1:N
produce(i)
end
end
Run Code Online (Sandbox Code Playgroud)
(发电机版)
function fun_gener()
sum = 0
g = @task generator(100000)
for i in g
sum += i
end
sum
end
Run Code Online (Sandbox Code Playgroud)
@time fun_gener()
已用时间:0.420731828秒(已分配6507600字节)
(阵列版)
function fun_arry()
sum = 0
c = [1:100000]
for i in c
sum += i
end
sum
end
Run Code Online (Sandbox Code Playgroud)
@time fun_arry()
已用时间:0.000629629秒(已分配800144个字节)
谁能告诉我为什么@task在这种情况下需要更多空间?如果我想将内存使用量保存为处理大量值,我该怎么办?
我最近浏览了一些Julia的源代码,发现一些函数对我来说似乎很神秘.
在Julia源代码中定义了一些函数,它们没有参数但是有类型注释.
例如:abstractarray.jl中的第20行
我尝试了一下这个ndims功能,
似乎ndims可以将类型本身作为参数并返回正确的值:
julia> ndims(AbstractArray{Float64, 2})
2
julia> ndims([1.1 0.3; 0. 0.5])
2
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释一下(::DataType)方法的工作原理吗?或者朱莉娅的意思是什么?