Julia机器学习核心编程:人人可用的高性能科学计算
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.2 函数参数

到目前为止,我们一直在讨论Julia中的函数语法,以及如何创建一个函数。当我们讨论函数时,一个非常重要的方面就是参数。毫无疑问,在其他语言中几乎都使用过参数,并且参数可以通过值或者引用传递。

但是Julia却不同,在Julia中参数是通过分享传递的。为了搞清楚什么是分享传递,让我们先看一下值传递和引用传递这两种常用的方法。

3.2.1 值传递和引用传递

当我们说传值的时候,则意味着无论给函数传递什么参数,函数都会将这个参数复制一份,即相同变量的拷贝会被传递给函数。

当我们说通过引用传递参数时,则意味着参数的引用或者位置也会传递给该函数,不会进行拷贝操作而将值传递给函数。

3.2.2 分享传递

当通过分享传递时,当作参数传递的变量不会被复制。相反,函数参数本身充当新的绑定,函数参数就是被传递的变量本身。

3.2.3 return关键字

使用return关键字将会终止一个函数的执行并将控制返回给调用函数。Julia中的函数可能会显式使用return来返回一个值。如果没有return,Julia会计算并返回最后一个表达式的值。例如,下面的代码返回的值是相同的。

【范例3-6】使用return和不使用return的对比

我们定义两个相似的函数来进行对比。

01  julia> function add_without_return(x,y) # 不使用return关键字,
02  返回最后一个表达式的值
03         x+y
04      end
05  add_without_return (generic function with 1 method)
06  julia> add_without_return(6,7)
07  13
08  julia> function add_using_return(x,y)  # 使用return关键字
09        return x+y
10      end
11  add_using_return (generic function with 1 method)
12  julia> add_using_return(6,7)
13  13
14  julia> add_without_return(6,7) == add_using_return(6,7)
15  true

代码01~04行定义了一个函数,其作用是将传入的两个参数相加,但是这里没有使用return关键字返回结果。代码08~10行定义了另外一个函数,其作用与上一个函数相同,但是使用了return关键字返回结果。可以发现,两者的结果其实没有差别。