首页
学习
活动
专区
工具
TVP
发布

Julia语法基础:函数初阶

函数命名

Julia推荐的命名规范是使用小写字母,如果会修改外部值,在函数名后加上。

简单函数

要定义个简单的函数,只需要左边提供函数名和参数,右边提供一个表达式。这很像数学函数。

由于支持Unicode,可以把代码写得稍微数学一点,抽象一点:

语法来源于LaTeX,使用+Tab输入

函数参数的传递

Julia的传入函数的参数遵循“pass-by-sharing”约定,这就意味着传递给函数时参数不会被复制。对参数的修改也会影响到原来的数据。(单值还是不会修改的)

多个表达式的函数

具有多个表达式的函数就和我们通常所熟悉的函数没有太大的区别了。不过,可以很简要的写:

极简写法

很纯粹,也不需要。

可选参数

可以为函数参数提供默认值。

参数数量可变函数

在参数后面加上可以支持可变数量的参数。这些函数被称为“varargs”函数。

还能用数组直接传入多个参数,后面也要加上。

关键字参数

如果一个函数有大量的参数,或者有大量的行为,要记住如何调用这些函数非常困难。使用关键字参数可以使这些复杂的接口更容易使用和扩展,julia允许使用名称来标识参数,而不是通过位置来标识参数。

例如,假设有一个函数,它是一个用来绘制一条函数曲线的函数。这个函数可能有很多种选项,比如控制线条样式、宽度、颜色等等。那可以这样定义函数:

必要的参数在分号前写,关键字参数写在分号后面。分号前的参数必须按照相对位置,加上形参名也不行。关键字参数可以任意选择。

多个返回值

C语言只能返回单个值,要返回多个值,有一种解决方法是在函数参数上用指针传递。但是,这无疑是一种很拙劣的解决方案。号称“21世纪C语言”的Go语言在语言上支持多返回值,还借此设计了一套不同于主流语言的错误处理手法。Julia同样支持多返回值,实际上是返回了一个元组,只不过可以在不需要括号多情况下创建和解构,因此有一种错觉。

Python实际也是返回元组,Julia这一点大概是借鉴Python的。

拓展:Python的写法

参数解构

Julia 0.7之后支持函数参数上的解构,在函数内部,会自动对元组进行“拆箱”。有时候这可以写出更紧凑的代码:

运算符也是函数

在Julia 中,大多数操作符只是特殊语法的函数。(具有特殊求值语义的操作符是一个例外,比如和,根据短路求值的要求,操作数并没有完全在操作符之前求值,所以不构成函数)。

还有比如,调用的是,,调用的是。

匿名函数

Julia的函数是一等对象,可以赋值给变量,可以作为函数的参数传递,又可以作为函数的返回值

匿名创建的函数在很多地方都可以简化代码。比如,要把1到10的数字进行平方,大动干戈地写一个平方函数显然有点麻烦,就可以用匿名函数加上写成这样:

Do-Block语法

倘若在函数参数中使用匿名函数,而匿名函数又有点长,就难免会有一种头重脚轻的感觉,看起来特别尴尬。此时,就可以使用Do-Block语法。

举个例子,如果我们这样写:

看起来就特别尴尬,而且显得很渺小,很容易被我们忽略。使用语法可以改写成下面这样:

这样我们就可以这样理解,对于中的元素执行这样的操作,小于0并且是偶数的时候.....比起上面的那种写法,更容易懂,也更具有可读性。

对Python熟悉的同学可能还记得Python中的保留字,可以用来保证打开文件后关闭。Julia的也有类似的功能:

在之前进行操作文件的操作,离开该语法块后自动关闭文件,不需要显式关闭文件。

拓展:Python的写法

点语法:函数向量化

在很多工程计算的语言中,通常都会有“向量化”版本的函数,它将给定的函数操作应用于数组的每个元素,产生出一个新的数组。这种语法便于数据处理,在其他的语言中,比如MATLAB,向量化通常也可以提高性能:可以调用低级语言编写的代码。在Julia中,向量化并不是性能必须的,因为Julia的循环并不慢。

虽说在Julia中,函数向量化并不能大幅提升性能,甚至在大多数时候,自己编写循环反而更高效,但是,向量化还是很方便的。

任何Julia函数都可以通过应用于任何数组(或者集合集合)。

如果你不想用这种语法,你也可以使用自己定义一个,效果和效率上都是一样的。

操作符背后的函数

对应

对应

对应

对应

对应

对应

对应

对应

小结

这远远不是Julia函数的全部,可以说是最基础的。

会修改(全局)参数的函数结尾使用

函数在julia中也是一等公民

julia支持多返回值

do-block语法可以提高可读性

向量化对于julia而言没有太大的性能提升

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180813G1RKXW00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券