文章目录

  • 函数
    • 自定义函数
    • return
    • 操作符
    • 匿名函数
    • Do结构
    • 点语法

函数

自定义函数

在 Julia 里,函数是一个将参数值元组映射到返回值的对象。Julia 的函数不是纯粹的数学函数,在某种意义上,函数可以改变并受程序的全局状态的影响。
基本语法:

function f(x,y)x + y  #返回最后一个表达式的值
end

Julia定义函数的简洁语法:
f(x,y) = x + y
注:和变量名一样,Unicode字符(∑、Ψ)等也可以用作函数名。

return

1、默认情况下,函数返回最后计算的表达式的值,return可以让函数立即返回一个表达式的计算值,如:

funtion f(x,y) x + y  #返回最后计算的表达式的值
end
function g(x,y)return x^y  #返回值为x^y的计算值,非x+yx + y  #这个是没有意义的,因为x+y永远不会执行到,然而return在控制流中有意义
end
return在控制流
function f(a,b)if a == b #比较两数大小return a,"=",belseif a > breturn  a, ">", belsereturn a, "<", bend
end

#因为每个控制流中都有一个end结尾,所以对于return的位置要格外注意。如下方的一个例子,return写在while里面,返回了-1后,程序就停止了。

如果把return放置别的地方,再次运行

2、多返回值
需要将返回的值所对应的表达式写到最后,如:

function k(x,y)x + y, x^y, x÷y
end

操作符

1、操作符(+,-等)也是函数(除&&、||外),如:

julia> 1 + 2 + 3
6
julia> +(1,2,3)
6
julia> f = +
julia> f(1,2,3)
6
julia> (sqrt ∘ +)(3, 6) #先把数字相加,再对结果求平方根。
3.0
julia> 1:10 |> sum |> sqrt  #求和后开根号
7.416198487095663
julia> (sqrt ∘ sum)(1:10)
7.416198487095663

2、特殊名称的操作符

表达式 函数调用
[A B C …] hcat
[A; B; C; …] vcat
[A B; C D; …] hvcat
A’ adjoint
A[i] getindex
A[i] = x setindex!
A.n getproperty
A.n = x setproperty!

匿名函数

可以指定给变量,并使用标准函数调用语法通过被指定的变量调用。函数可以用作参数,也可以当作返回值。函数也可以不带函数名称地匿名创建,其最主要的用法是传递给接收函数作为参数的函数,对延迟计算很有必要,使用语法如下:

julia> x ->x^2 + x + 1
#1 (generic function with 1 method)
julia> function (x)x^2 + 2x - 1end
#3 (generic function with 1 method)
julia>  function(x)x^2 + x +1end
#5 (generic function with 1 method)
julia> (x,y,z) -> x+y+z
#7 (generic function with 1 method)
注意结果是个泛型函数,但是带了编译器生成的连续编号的名字。

?怎么调用该函数?

julia> map(x -> x^2 + 2x - 1, [1, 3, -1])
3-element Array{Int64,1}:
2
14
-2

Do结构

把函数作为参数传递给其他函数是一种强大的技术,但它的语法并不总是很方便。当函数参数占据多行时,这样的调用便特别难以编写。例如,考虑在具有多种情况的函数上调用 map:

julia> map(x->beginif x < 0return "-"elseif x == 0return 0elsereturn "+"endend,[-1,0,43,1])
4-element Vector{Any}:"-"0"+""+"
julia> map([-1,0,43,1]) do xif x < 0return "-"elseif x == 0return 0elsereturn "+"endend
4-element Vector{Any}:"-"0"+""+"

点语法

julia> a = [1,2,3]
5-element Vector{Int64}:123
julia> sin.(a)
5-element Vector{Float64}:0.84147098480789650.90929742682568170.1411200080598672julia>  @. sin(cos(a))  #利用宏来进行函数调用
5-element Vector{Float64}:0.5143952585235492-0.4042391538522658-0.8360218615377305

在 Julia 中,向量化函数不是性能所必需的,实际上编写自己的循环通常也是有益的,但它们仍然很方便。因此,任何 Julia 函数 f 能够以元素方式作用于任何数组(或者其它集合),这通过语法 f.(A) 实现。

额外:

作者是新手,为了毕设,每天会更新自己的一些学习和坑,希望在自己的学习过程中可以帮助到大家,有什么不好的地方,麻烦大家指点一些,有什么好的建议,希望大家在评论区留言。谢谢。

Julia学习04——函数相关推荐

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

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

  2. julia 学习_与Julia和合子一起学习异或

    julia 学习 Training a multi-layer perceptron with automatic differentiation package Zygote. 使用自动分化程序包Z ...

  3. 20171220-python学习笔记--函数类型

    20171220-python学习笔记--函数类型 备注: #位置参数 #传入两个参数 def power(x, n):s = 1while n > 0:n = n - 1s = s * xre ...

  4. 黑马程序员——c语言学习心得——函数传递二维数组

    黑马程序员--c语言学习心得--函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化.    变量 ...

  5. Python学习之函数返回多个值

    Python学习之函数返回多个值 问题的引出 Python中,一个函数能不能一次返回多个值? 在C语言中,函数最多返回一个值,如果要返回多个值,可以把这些值封装在一个结构体中.注意,C语言不允许函数返 ...

  6. JVM学习04:类的文件结构

    JVM学习04:类的文件结构 写在前面:本系列分享主要参考资料是  周志明老师的<深入理解Java虚拟机>第二版. 类的文件结构知识要点Xmind梳理 转载于:https://www.cn ...

  7. python学习之函数

    最近跟着廖雪峰老师的python教程在学习,总结一下学习成果 函数定义: 当没有return语句时,返回的结果为None def 函数名 ():函数体return 返回值 函数调用: 我们可以调用py ...

  8. 空间连接时计算总和_学习CALCULATE函数(六)丨帕累托之累计求和

    (写在前面的话:非常感谢@韭菜大神和@冬神的指点,万分感谢.) 哎,说归说,还是需要继续学习CALCULATE函数,也是蛮无奈的.最近白茶在研究帕累托分析法,本期分享一下帕累托ABC分析法的基础--累 ...

  9. Julia学习(1)——入门

    Julia学习(1)--入门 如何打印 变量如何赋值 如何注释 基本数学语法 ref: learn julia in Y mins, Julia By Example , jula wiki book ...

  10. 学习CALCULATE函数(六)丨帕累托之累计求和

    (写在前面的话:非常感谢 @韭菜大神和 @冬神的指点,万分感谢.) 哎,说归说,还是需要继续学习CALCULATE函数,也是蛮无奈的.最近白茶在研究帕累托分析法,本期分享一下帕累托ABC分析法的基础- ...

最新文章

  1. rviz学习笔记(一)——Markers: Sending Basic Shapes (C++) 发送基础形状
  2. 【深度学习笔记】CUDA
  3. Spring Security --SecurityConfig的详细配置
  4. spring boot环境准备及搭建
  5. 2019-3-15 模拟赛 T1
  6. flask取mysql数据很慢_[flask 优化] 由flask-bootstrap,flask-moment引起的访问速度慢的原因及解决办法...
  7. Sql字符串函数(1)
  8. 鸿蒙微内核游戏,华为鸿蒙微内核
  9. Oracle RAC CRS-0184 --Cannot communicate with the CRS daemon
  10. red5流媒体服务器安装
  11. 巨蟒python全栈开发-第5天 字典集合
  12. 洛谷试炼场---普及练习场
  13. 我深夜用 Python 跑神经网络,只为关掉台灯!
  14. [jruby] warbler 配置问题说明
  15. 关于light7使用路由经验总结及踩的坑
  16. 利用爬虫获取免费IP代理
  17. 「镁客早报」OneWeb顺利发射首批6颗互联网卫星;华为西欧负责人称公司将会获得德国5G合同...
  18. Xcode-关于切换窗口的快捷键
  19. Python机器学习:泰坦尼克号获救预测一
  20. 2G、3G要退出历史舞台了?为何3G比2G淘汰更快?

热门文章

  1. 第8章 资源管理调度框架YARN
  2. routerOS做wan口的交换机扩展和带宽叠加
  3. 处理行内元素行内块元素中间空隙
  4. Windows 10系统下Outlook日历怎么显示农历?
  5. 三国演义人物出场次数统计
  6. 廊坊金彩教育:怎么做主图
  7. 三做一年级算术题-吐槽挖雷
  8. curl DNS解析失败crash问题
  9. 删除文件显示正在使用无法删除该怎么办?
  10. 15款外贸高手都在用的邮箱工具和关键词分析工具