学习笔记,仅供参考,有错必纠

参考自:Julia数据科学应用–Zacharias Voulgaris;官方文档

使用Julia-1.1.1


自定义函数

元祖

Julia有一个称为元组的内置数据结构,它与函数参数和返回值密切相关。元组是一个固定长度的容器,可以保存任何值,但不能被修改(它是不可变的),元组由逗号和括号组成,可以通过索引访问:

julia> (1,2+1)
(1, 3)julia> (1,)
(1,)julia> x = (1, "Hello", 3.14)
(1, "Hello", 3.14)julia> x[2]
"Hello"

注意,长度为1的元组必须使用逗号(1,)来编写,因为(1)只是一个带括号的值。()表示空(长度为0)元组。

命名元祖

元组的组件可以选择命名,在这种情况下,一个命名的元组被构造:

julia> a = (x = 1, y = 2)
(x = 1, y = 2)julia> a.y
2

除了字段可以通过名称使用点语法访问之外(x.a),命名元组与元组非常相似。

多返回值

在Julia中,返回一个元组来模拟返回多个值,可以在不需要圆括号的情况下创建和销毁元组,从而提供返回多个值而不是单个元组值的错觉,例如,下面的函数返回一对值:

julia> function h1(a, b)a*b, a+bend;julia> h1(2,3)
(6, 5)julia> x, y = h1(3, 4);julia> x
12julia> y
7

可变参数函数

编写带有任意数量参数的函数通常很方便,这样的函数传统上称为“varargs”函数,是“可变参数数”的缩写,我们可以在最后一个参数后面加上一个省略号来定义一个可变参数函数:

julia> h2(a, b, x...) = (a, b, x)
h2 (generic function with 1 method)julia> h2(1, 2, 3)
(1, 2, (3,))julia> h2(1, 2)
(1, 2, ())julia> h2(1, 2, 4, 5)
(1, 2, (4, 5))

元祖中包含的值作为单独的参数传到函数中,要做到这点,我们需要使用省略号...

julia> x = (4, 5, 6)
(4, 5, 6)julia> h2(1, 2, x)
(1, 2, ((4, 5, 6),))julia> h2(1, 2, x...)
(1, 2, (4, 5, 6))julia> h2(1, x...)
(1, 4, (5, 6))julia> h2(x...)
(4, 5, (6,))

此外,插入函数调用的可迭代对象不必要是元组:

julia> x = [3, 4, 5]
3-element Array{Int64,1}:345julia> h2(1, 2, x...)
(1, 2, (3, 4, 5))julia> h2(x...)
(3, 4, (5,))

Evaluation Scope of Default Values

当计算可选参数和关键字参数默认表达式时,范围内只有前面的参数,例如,给出如下定义:

function f(x, a=b, b=1)###
end

a=b中的b指的是外部范围中的b,而不是后面的参数b。

Do-Block

将函数作为参数传递给其他函数是一种功能强大的技术,但其语法并不方便,当匿名函数需要多行时,这样的调用尤其难以编写,举一个例子:

map(x->beginif x < 0 && iseven(x)return 0elseif x == 0return 1elsereturn xendend,[A, B, C])

Julia提供了一个保留字do,重写这个代码:

map([A, B, C]) do xif x < 0 && iseven(x)return 0elseif x == 0return 1elsereturn xend
end

do x语法创建一个带有参数x的匿名函数,并将其作为要映射的第一个参数传递。类似地,do a,b将创建一个双参数匿名函数,而普通的do将声明形式为()->…的匿名函数

这些参数的初始化方式取决于“外部”函数,在这里,map将按照顺序,将x设置为A、B、C,并对每个函数调用匿名函数,正如语法映射中所发生的那样(func, [A, B, C])

这种语法使得函数有效扩展语言变得更加容易,因为调用起来就像普通的代码块,例如,doopen函数中的用法,确保打开的文件最终关闭:

open("outfile", "w") do iowrite(io, data)
end

和其他内部函数一样,do可以从作用域(enclosing scope)中“捕获”变量,例如,在open…do中变量data是从外部范围捕获的。

探索Julia(part11)--自定义函数相关推荐

  1. 探索Julia(part10)--自定义函数

    学习笔记,仅供参考,有错必纠 参考自:Julia数据科学应用–Zacharias Voulgaris:官方文档 使用Julia-1.1.1 自定义函数 Functions 在Julia中,函数是将参数 ...

  2. SAP资产负债表实现方案探索 - 基于 VBA 自定义函数方法

    本篇接着SAP资产负债表实现方案探索 - 基于 Excel-DNA 自定义函数方法 这篇博文,继续介绍通过 VBA 编写自定义函数来实现资产负债表的方法.在上一篇文章中,整体解决方案的思路可以分为两个 ...

  3. SAP资产负债表实现方案探索 - 基于 Excel-DNA 自定义函数方法

    早前曾基于 VBA 的 RFC 的方式从 SAP 获取数据,在 Excel 中自定义函数实现资产负债表,也把实现的过程在博文中进行了介绍:SAP接口编程之综合实例(一):资产负债表方案. 完成之后,对 ...

  4. 探索Julia(part1)--Julia初识

    学习笔记,仅供参考,有错必纠 参考自:Julia数据科学应用–Zacharias Voulgaris 前言: 由于数据的快速增长,数据科学必须利用各种工具的强大功能来应对大数据的挑战.因为数据科学的一 ...

  5. 探索Julia(part12)--函数组合及管道

    学习笔记,仅供参考,有错必纠 参考自:Julia数据科学应用–Zacharias Voulgaris:官方文档 使用Julia-1.1.1 函数组合及管道 函数组合 Julia中的函数可以通过组合或连 ...

  6. sql 自定义函数 示例_SQL Server SESSION_CONTEXT()函数与示例

    sql 自定义函数 示例 This article explores the SQL Server session context function, SESSION_CONTEXT() and pe ...

  7. 自定义函数使用GridSearchCV参数寻优

    自定义函数使用GridSearchCV参数寻优 GirdSearchCV and RandomizedSearchCV 自定义函数中使用GirdSearchCV GridSearchCV参数说明 Gr ...

  8. sql 自定义函数 示例_SQL Server Choose()函数介绍和示例

    sql 自定义函数 示例 In the article, a CASE statement in SQL, we explored one of the important logical expre ...

  9. 2021年大数据Hive(八):Hive自定义函数

    全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 Hive自定义函数 一.概述 1.UDF(User-Define ...

最新文章

  1. 病毒特征码定位原理和首次使用MyCCL
  2. UML 类图几种关系的总结
  3. php 通过相对或得绝对,相对路径与绝对路径的了解与深入
  4. poj 1144 割点和桥
  5. CSS一些实用的技巧
  6. 论文浅尝 | HEAD-QA: 一个面向复杂推理的医疗保健数据集
  7. 插件占坑,四大组件动态注册前奏(三) 系统BroadCast的注册发送流程
  8. 腾讯的bugly的更新和热更新
  9. 固态硬盘安装Win7双系统
  10. 爬虫-豆瓣top250,东方财富网动态数据
  11. 使用EasyPoi利用excel模板导出excel表格下载
  12. 合数python_python输出100以内的质数与合数
  13. 又是一年推gal季(牛客OI周赛5-提高组)
  14. Java 绘制带圆角头像的二维码
  15. 如何还原MySQL备份文件.xb
  16. Jplayer播放器广告插件
  17. 电脑打不开网页,能ping通,能上QQ,解决办法。
  18. c语言中占位符,Java C# C语言中的占位符
  19. 余额宝收益率跌破5% 落后银行类宝宝产品
  20. 牛客网2018年全国多校算法寒假训练营练习比赛(第二场)

热门文章

  1. 机器学习:防止模型过拟合的方法
  2. 红黑联盟c语言教程,1.1.2 C语言的特点
  3. oracle的脚本语言,Oracle 无法执行SQL脚本语句
  4. 下载文章图片 php,PHP下载文章中的图片+处理文章中的字符
  5. “小罐茶大师作”20亿元销售额难掩虚假宣传本质
  6. rsync的安装使用01
  7. NUMA架构的CPU -- 你真的用好了么?
  8. Unrecognized attribute 'targetFramework'. Note that attribute names are case-sensitive.
  9. Geek爱旅行 - 穿越时间的旅行
  10. 经典SQL语句大全(技巧篇)