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

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

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

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

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

下面定义一个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。

最近在看一些关于科学哲学的书籍.看完以后其实有一种深深地无力感

(0)

相关推荐

  • 说说Python中的lambda表达式?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  • Julia机器核心编程.函数

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

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

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

  • Julia机器核心编程.5

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

  • Julia机器核心编程.7

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

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

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

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

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

  • 没有学不会的python--函数式编程以及高阶函数

    没有学不会的python 函数式编程 到现在为止,我们的没有学不会python系列文章已经讲了很多知识点了,如果是第一次刷到这篇文章的朋友可以去我主页看一下以前写的文章.前面讲了很多知识点,每个知识点 ...

  • Python高阶函数

    该篇中主要介绍什么是高阶函数,高阶函数的用法以及几个常见的内置的高阶函数. 什么是高阶函数? 高阶函数:一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身, ...

  • 安利5个Python高阶函数:lambda,Map,Filter,Itertools,Generat...

    任何编程语言的高级特征通常都是通过大量的使用经验才发现的.比如你在编写一个复杂的项目,并在 stackoverflow 上寻找某个问题的答案.然后你突然发现了一个非常优雅的解决方案,它使用了你从不知道 ...