Julia 1.0+;中有哪些不同的for循环方法;?
我正在寻找不同的方式写循环在朱莉娅!我知道这是一个基本问题,但我想知道一些不同的选项是什么,以及在性能方面是否有优势/劣势。这是直接从以下方面得出的: for循环使常见的重复评估习惯用法更易于编写。由于向上和向下计数与上面的while循环非常常见,因此可以使用for循环更简洁地表示:Julia 1.0+;中有哪些不同的for循环方法;?,julia,Julia,我正在寻找不同的方式写循环在朱莉娅!我知道这是一个基本问题,但我想知道一些不同的选项是什么,以及在性能方面是否有优势/劣势。这是直接从以下方面得出的: for循环使常见的重复评估习惯用法更易于编写。由于向上和向下计数与上面的while循环非常常见,因此可以使用for循环更简洁地表示: julia> for i = 1:5 println(i) end 1 2 3 4 5 这里的1:5是一个范围对象,表示数字序列1,2,3,4,5。for循环迭代这些值,
julia> for i = 1:5
println(i)
end
1
2
3
4
5
这里的1:5
是一个范围对象,表示数字序列1,2,3,4,5
。for循环迭代这些值,将每个值依次分配给变量i。先前while循环形式和for循环形式之间的一个相当重要的区别是变量可见的范围。如果变量i
未在另一个作用域中引入,则在for循环形式中,它仅在for循环内部可见,而不在for循环外部/之后可见。您需要一个新的交互式会话实例或不同的变量名来测试:
julia> for j = 1:5
println(j)
end
1
2
3
4
5
julia> j
ERROR: UndefVarError: j not defined
有关变量作用域及其在Julia中的工作方式的详细说明,请参见
通常,for循环构造可以迭代任何容器。在这些情况下,在或∈代码>通常用于代替=
,因为它使代码读得更清楚:
julia> for i in [1,4,0]
println(i)
end
1
4
0
julia> for s ∈ ["foo","bar","baz"]
println(s)
end
foo
bar
baz
本手册后面的章节将介绍和讨论各种类型的iterable容器(例如,请参见)。有关回路
赞成:完全灵活的有中断和继续
Con:不返回,必须在开始时指定迭代器
While循环
赞成:完全灵活的有中断和继续
Con:如果必须手动处理迭代器,则不返回
标签+转到
请不要将此用于循环
生成器理解/向量理解
Pro:有返回值,continue用filter子句表示,采用lazy(生成器)和eager(向量)形式,可以创建多维返回值
缺点:长时间都很难看,不能休息
广播
Pro:连续表示多个输入的转换,返回值与输出结构匹配。可以用一个点表示,并支持循环融合
缺点:不休息不休息。编写body意味着编写一个函数。在Ref
中将要广播的内容包装为标量有点难看
Map/pmap/asyncmap
以块形式书写
Pro:可以轻松更改为分布式或异步运行,并具有返回值
缺点:没有休息,就没有继续
foreach
功能
它很像map,但没有返回值。所以节省分配
除了相同的优点和缺点