前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Julia机器核心编程.高阶函数

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

作者头像
云深无际
发布2020-09-03 17:17:53
6110
发布2020-09-03 17:17:53
举报

我这个起名好麻烦,都说函数完了.有整出来一个高阶函数,比较麻烦.

嵌套函数,简单来说,就是在函数中定义函数。

闭包是一个函数对象,它可以记住封闭范围中的值,即使它们不在内存中也是如此。

嵌套函数有助于开发者向最终用户屏蔽函数的实际实现。

下面定义一个outer函数,并在其中定义一个inner函数。

抱歉这个排版不好看

代码01~05行定义的函数是外层函数,而02~04行定义的函数是内层函数,并且很明显,由于内层函数在外层函数内,所以内层函数可以使用外层函数中定义的各种变量。

我们将两个不同的参数传递给两个函数,然后利用它们返回两个字符串连接后的值(在Julia中“*”用于连接字符串)或者两个整数相乘后的值,这取决于所传入的参数的数据类型。同时,还要假设所传入的两个参数的类型相同,因为如果两个参数一个是字符串,一个是整数,那么就会由于函数设计的问题而抛出一个错误。

在Julia REPL中调用相同的函数,这里我们让所传入的两个参数都是Int64类型。

代码01行首先调用outer函数,传入第一个外层参数100,然后将函数的返回结果赋值给result,那么外层函数返回了什么给result呢?实际上,外层函数将内层函数作为一个整体返回给了result,从02行的结果可以看出,result实际上对应的就是inner函数。代码04行使用typeof函数查看result的类型,可以看出result的类型实际上就是一个函数

最后在代码07行调用result所对应的函数,并传入100作为第二个参数,经过计算,08行返回了两个参数相乘所得到的结果10000。

同样,下面我们给函数传递两个String类型的参数。

代码01~08行与上一个例子基本一样,只不过在传入参数变成两个字符串的情况下,Julia会自动将两个字符串连接在一起。

在上述两种情况下,我们都是先将outer函数的值赋给result变量,然后将第二个参数传递给result对象所代表的函数,完成后才得到预期的结果。

接下来是匿名函数啦,马上就要把今天的任务写完了,嘻嘻嘻.

匿名函数(lamuda函数)

匿名函数是常规函数的一种简写方式。当一个函数仅会被使用有限次数时,在编写代码时就可以使用匿名函数,而不使用命名函数,这样有助于我们更容易和更快地写出代码。匿名函数有时也被称为lambda函数。

想要明白匿名函数的用处,只需要考虑一个场景:假如希望使用map()函数在一个列表的每个值上都应用一个函数,我们可以轻松地定义一个匿名函数来解决这个问题,而不必写下一个完整的命名函数,也就再也不必费心给函数命名了!

在Julia中,我们可以使用以下语法定义一个匿名函数。

写了一个出来

上面的语法使用“−>”来提示我们这里定义了一个匿名函数。但是,需要铭记于心的是,匿名函数本身没有用,因为它们没有名字,因此无法从代码的任何位置进行调用。

代码01行定义了一个map()函数,它可以接收两个参数:第一个是函数;第二个是一个可以轻松迭代的值的集合。

为简单起见,我们使用一个列表来作为第二个参数。

这里的第一个参数f−> 3f是一个匿名函数,它的作用是从列表中获取一个值并乘以3。f就是传入的参数,−>代表参数的变化方向,3f代表参数变成原来的3倍。从代码02~03行可以看出,数组中的所有元素都被改变了。需要注意的是,代码06行中传入的参数和01行是不一样的,在01行中传入的是一个拥有两个int类型元素的数组,而在06行中传入的是一个单独的数组,这两个参数是有一定的区别的。

上面的例子只讨论了接收一个参数的匿名函数。但是,如果有多个传入参数该怎么办呢?为了解决这个问题,我们可能会被迫使用开括号和闭括号来表示函数体内的变量元组。

在这个例子中使用了一个map()函数,它同时接收多个列表。执行此map()函数的结果为3f + 3g,即3*(2)+3*(3)=15和3*(3)+3*(4)=21。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档