for i in 1:2
if i == 2
print(x)
end
if i == 1
x = 0
end
end
UndefVarError : x 未定义
为什么代码给出该错误而不是在 juli 中打印 0?
而在python中,以下代码打印0?
for i in range(2):
if i==1:
print(x)
if i==0:
x=0
原因是因为在循环中,每次执行循环时,变量都会获得一个新的绑定,请参阅 https://docs.julialang.org/en/latest/manual/variables-and-scoping/#For-Loops-and-Comprehensions-1。
事实上while
循环在 Julia 0.6.3 和 Julia 0.7 之间更改了此行为(在 Julia 0.6.3 中,没有创建新的绑定(。因此,以下代码:
function f()
i=0
while i < 2
i+=1
if i == 2
print(x)
end
if i == 1
x = 0
end
end
end
提供以下输出。
朱莉娅 0.6.3
julia> function f()
i=0
while i < 2
i+=1
if i == 2
print(x)
end
if i == 1
x = 0
end
end
end
f (generic function with 1 method)
julia> f()
0
朱莉娅 0.7.0
julia> function f()
i=0
while i < 2
i+=1
if i == 2
print(x)
end
if i == 1
x = 0
end
end
end
f (generic function with 1 method)
julia> f()
ERROR: UndefVarError: x not defined
Stacktrace:
[1] f() at .REPL[2]:6
[2] top-level scope
For-loop在每次迭代时已经在Julia 0.6.3中创建了一个新的绑定,因此它在Julia 0.6.3和Julia 0.7.0下都失败了。
编辑:我已经将示例包装在一个函数中,但是如果您在全局范围内执行while
循环,您将获得相同的结果。
忽略我的评论并接受 Bogumil 的答案,因为这是真正的 rwason 为什么你的x
变量在第二次迭代中消失了。
如果您希望您的代码像在 Python 中一样工作,您可以将 global 关键字添加到您的x
分配中:
for i in 1:2
if i == 2
print(x)
end
if i == 1
global x = 0
end
end
请注意,在大多数情况下不建议这样做,因为这会使代码性能受到影响。Julia 喜欢编译器可以轻松优化的局部变量。