MENU

Julia学习笔记(3)--控制语句

• February 23, 2020 • Read: 4752 • Julia语言

控制语句

Julia中的控制语句与其他语言都大同小异,语法规范与Matlab相似,需要以end来结尾,而不是Python的缩进控制。此外,Julia中多了一种复合语句。控制语句具体分为4类。

  • 复合语句:begin.......end
  • if-else-end
  • while -end
  • for end

Julia中,对于控制语句或者是函数function定义,都必须以end来结尾,这一点上与Matlab保持一致。

begin...end

复合语句是Julia语言的特色,有点类似于数学公式的推导。

a = begin
    x = 1
    y = 2
    z = x+y
end
# begin...end语句会将最后一个式子的值进行返回
# 运行后a的值是z,即3。

for循环

Julia中的for循环表达即像Matlab,又具有一些Python的特性。首先,for循环中循环变量的表达即可以用$=$,也可以用关键字$in$。

for i=1:3  # 用=进行循环变量的循环,与Matlab一致
    println("hello, world!")
end

for i in [1,2,3]  # in遍历向量[1,2,3]中的各个元素
    println("hello, world!")
end

while循环

while语句常常用于未知循环次数时的循环表达,在数值计算中,迭代算法往往需要用while循环,而不是for循环,while是入口条件的循环体,循环控制条件一般用前后两步结果的差值来衡量(对于向量来说采用范数来衡量)。但是Julia中while循环却不同于Matlab或者Python,这是因为Julia语言中变量的作用域不同。while循环的语法为:

i = 0;  # 初始化一个变量i,i后面座位循环变量
while i < 5
    println("hello, world!");
    global i += 1;
end

变量的作用域

之前已经给出了Julia中循环语句的语法,但是,在实际学习中会发现,虽然语法上与Matlab或者Python基本一致,但是却无法运行。导致错误的原因就是Julia中循环体中变量的作用域是限制在循环体内部的,是一个局部变量,不会影响到循环体外。while中要让循环变量发生增加才能使得循环结束,所以需要在循环内部将循环变量申明为全局变量global。不论是for还是while循环都遵循这个规律,因而Julia的循环控制使用起来会让人觉得生疏。

# 求一个一维向量的和,用for循环完成
a = rand(10); # 随机生成一个10个元素组成的向量a
s = 0;  # s表示和,初始值为0
for i in a
    global s += i;
end

如果没有global,程序一样会执行,但是s的值永远为0,因为内部的变量都是局部变量。而且此时工作空间中是没有变量i的,因为它仅是一个内部变量,不会对全局产生任何影响。而在Python中,不需要用global申明,循环体内变量本身就是全局的,Python的结果中,i的值是a向量中最后一个元素的值。

条件语句

Julia中if-elseif-else-end语句与Matlab或者Python的语法十分相似,用法也大同小异,elseif可以省略,但是只要出现elseif就必须要有else,if语句必须以end结尾。

if a > b
    println("a is greater than b");
elseif a == b
    println("a is equal to b");
else
    println("a is less than b");
end
Archives Tip
QR Code for this page
Tipping QR Code