Julia机器核心编程.函数

函数是任何编程语言都不可缺少的一部分,因为函数对功能进行模块化封装,提高了程序的可读性和可重用性。Julia也不例外,它不仅提供了一些内置的库函数,同时也允许用户自定义函数。

在Julia中使用function关键字来定义函数,使用end关键字来标识该函数逻辑的结束。

函数体,


别问为什么这么黄.电脑屏幕有护眼.

代码1定义了函数的名称,代码02行是函数体,也就是实际放置特定逻辑代码的位置,代码03行使用end来标识一个函数的结束。这种结束方式在其他语言中不是很常见,但是如果你之前接触过Visual Basic语言,那么可能会对这种结构有一定的了解。

函数名后面必须跟随一个小括号“()”,如果不这样做将会产生错误。如果你之前使用过Python语言,那么就会发现这与在Python中定义函数的语法有些不同。但是不用担心,在实际编写Julia代码时,这种定义函数的方法也十分简单。接下来就让我们看看在Julia的REPL中如何定义和使用一个函数。

很简单,很智能.end语句以后就自动停止了

代码01行定义了一个函数greet,这是一个没有参数的函数。代码02行为函数体,通过println函数来输出文字。代码03行使用end来表示一个函数结束了。当输入完end并按下回车键后,REPL中会输出04行的内容,这里显示了我们刚刚声明的函数的相关信息。代码05行对刚刚定义的函数进行调用,代码06行为我们预期的输出结果。

在官方文档中对函数的定义是,函数是一个将参数值元组映射到返回值的对象。

代码01行定义的函数名称为calculator,后面的括号里面有3个值,表示在调用函数时需要传入3个参数,它们分别是x、y和操作符。

代码02~14行是函数体,具体定义了根据不同的操作符选择不同计算方法的流程。值得注意的是,在代码10~13行我们还对不正确的操作符情况做出了处理,从而提高了程序的健壮性。

在代码下面我们分别对刚刚定义的函数进行了调用,这覆盖了函数的4个有效分支,其中x、y传入的参数类型均为整型,operation传入的参数类型是字符串。

Julia中的函数也可以使用紧凑形式来定义,下面是一个简单的例子。

这个函数的定义方法和前面的不同,这里不需要写function关键字,而是直接写函数名称和需要传入的参数名称,后面使用等号来连接函数体(等号后面的部分就是函数体)。这种定义方法一般适用于函数体较为简单的场合。

采用这种方法来定义函数,对于在工作中经常使用数学函数的人来说非常方便,大大节省了开发时间。

但是有很重要的一点需要记住,虽然Julia中的函数和数学函数十分相似,但是它们不是纯粹的数学函数,因为它们会被程序的全局状态所改变或受其影响。

有时候在Julia中定义一个函数时,我们有可能会在函数名称后面加一个“!”(不要与布尔运算符“!”混淆,Julia中没有布尔运算符“!”)。例如Julia中有一个名为 push! 的函数,它的功能是在集合的末尾插入一个或多个对象。

在代码01行我们调用了push!函数,传入了一个数组,之后又传入了想要添加到数组中的值13。代码02~06行是push!函数执行后的输出结果。可以看到,现在数组中一共有4个整型元素,它们分别是1、5、9、13。可以看出,数组的值已经发生改变。

那么“!”在这里真正的意义是什么呢?它是一个约定,我们用“!”来标识一个函数可以改变它的输入,或者说一个函数可以修改它的参数对象。所以在使用这种函数时,我们要保证的一个条件就是所传入的参数对象本身的值是允许修改的。

任何函数,无论名称是什么都可能修改参数的值;同样,一个声明了“!”的函数也可能不修改参数的值。在函数名中包含“!”仅仅是一个提醒开发人员该函数将会修改参数的值的约定,是一种良好的编码规范。

所有类型,包括String、Tuples、Int64、Float64等都是不可变的;同样,使用immutable关键词定义的类型也是不可变的。

(0)

相关推荐

  • 嵌入式编码规范,收藏细读!

    作为程序开发者,避免不了阅读别人代码,那么就会涉及到到一门语言的编程规范.规范虽然不是语言本身的硬性要求,但是已经是每一个语言使用者约定俗成的一个规范. 按照编程规范编写的代码,至少在代码阅读时,给人 ...

  • Julia机器核心编程.函数(完)

    当我们讨论函数时,一个非常重要的方面就是参数.毫无疑问,在其他语言中几乎都使用过参数,并且参数可以通过值或者引用传递. 但是Julia却不同,在Julia中参数是通过分享传递的.为了搞清楚什么是分享传 ...

  • Julia机器核心编程.高阶函数

    我这个起名好麻烦,都说函数完了.有整出来一个高阶函数,比较麻烦. 嵌套函数,简单来说,就是在函数中定义函数. 闭包是一个函数对象,它可以记住封闭范围中的值,即使它们不在内存中也是如此. 嵌套函数有助于 ...

  • Julia机器核心编程.5

    julia的浮点数 bits这个函数好像没有了,我xiang给你看下这个值 的二进制表示在最全面的符号位不同 指数形式的浮点数 代码01行使用f代替e来表示这是一个Float32类型的值.代码03行使 ...

  • Julia机器核心编程.7

    可以说,无论是R(data.frame)还是Python(Pandas)中的表格都是统计计算中最重要和最常用的数据类型.这是因为真实世界中的数据大多是表格式的,不能用简单的DataArray来表示. ...

  • Julia机器核心编程.作用域

    当我们在Julia中定义函数时,也可以在函数体内定义变量.在这种情况下,该变量在该函数的局部范围内有效,因此称为局部变量.而未在函数体内声明的变量在全局范围内有效,因此称为全局变量. 不同代码块中的变 ...

  • Julia机器核心编程.多重分配

    在开始深入探讨多重分派这个主题之前,我们先问自己一个简单的问题:分派到底是什么意思?用最简单的术语来解释,分派的意思就是发送! 在编程术语中,分派意味着向监听器发送一条消息或者调用一个函数.基本上就是 ...

  • Julia机器学习核心编程.1

    其实这个地方是应该有一个juliahitory的目录的,可是没有 只能曲线救国,这样搜索的用了 Ctrl+R 在终端里面搜索用过的命令 shift+?进入帮助模式 分号进入shell模式 报错打脸了 ...

  • Julia机器学习核心编程.4

    在win上加e参数,执行这个代码.不可以.类unix可以试试,我有空操作 我超级喜欢这种循环写法 我这个传参写法没有错,不知道这么久没有出来 与其他编程语言一样,Julia可以更改存储在变量中的值或改 ...

  • Julia机器学习核心编程.3

    一般来说,解决问题的思路是先找出问题的来源,然后将问题分解成若干个小问题逐一解决.同时,还需要考虑所有情况,以保证该方法能完整地解决问题.而编程范式就是一种将编程活动分解的思想,虽然编程范式有很多种, ...