Julia学习04——函数
文章目录
- 函数
- 自定义函数
- 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——函数相关推荐
- 探索Julia(part10)--自定义函数
学习笔记,仅供参考,有错必纠 参考自:Julia数据科学应用–Zacharias Voulgaris:官方文档 使用Julia-1.1.1 自定义函数 Functions 在Julia中,函数是将参数 ...
- julia 学习_与Julia和合子一起学习异或
julia 学习 Training a multi-layer perceptron with automatic differentiation package Zygote. 使用自动分化程序包Z ...
- 20171220-python学习笔记--函数类型
20171220-python学习笔记--函数类型 备注: #位置参数 #传入两个参数 def power(x, n):s = 1while n > 0:n = n - 1s = s * xre ...
- 黑马程序员——c语言学习心得——函数传递二维数组
黑马程序员--c语言学习心得--函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化. 变量 ...
- Python学习之函数返回多个值
Python学习之函数返回多个值 问题的引出 Python中,一个函数能不能一次返回多个值? 在C语言中,函数最多返回一个值,如果要返回多个值,可以把这些值封装在一个结构体中.注意,C语言不允许函数返 ...
- JVM学习04:类的文件结构
JVM学习04:类的文件结构 写在前面:本系列分享主要参考资料是 周志明老师的<深入理解Java虚拟机>第二版. 类的文件结构知识要点Xmind梳理 转载于:https://www.cn ...
- python学习之函数
最近跟着廖雪峰老师的python教程在学习,总结一下学习成果 函数定义: 当没有return语句时,返回的结果为None def 函数名 ():函数体return 返回值 函数调用: 我们可以调用py ...
- 空间连接时计算总和_学习CALCULATE函数(六)丨帕累托之累计求和
(写在前面的话:非常感谢@韭菜大神和@冬神的指点,万分感谢.) 哎,说归说,还是需要继续学习CALCULATE函数,也是蛮无奈的.最近白茶在研究帕累托分析法,本期分享一下帕累托ABC分析法的基础--累 ...
- Julia学习(1)——入门
Julia学习(1)--入门 如何打印 变量如何赋值 如何注释 基本数学语法 ref: learn julia in Y mins, Julia By Example , jula wiki book ...
- 学习CALCULATE函数(六)丨帕累托之累计求和
(写在前面的话:非常感谢 @韭菜大神和 @冬神的指点,万分感谢.) 哎,说归说,还是需要继续学习CALCULATE函数,也是蛮无奈的.最近白茶在研究帕累托分析法,本期分享一下帕累托ABC分析法的基础- ...
最新文章
- rviz学习笔记(一)——Markers: Sending Basic Shapes (C++) 发送基础形状
- 【深度学习笔记】CUDA
- Spring Security --SecurityConfig的详细配置
- spring boot环境准备及搭建
- 2019-3-15 模拟赛 T1
- flask取mysql数据很慢_[flask 优化] 由flask-bootstrap,flask-moment引起的访问速度慢的原因及解决办法...
- Sql字符串函数(1)
- 鸿蒙微内核游戏,华为鸿蒙微内核
- Oracle RAC CRS-0184 --Cannot communicate with the CRS daemon
- red5流媒体服务器安装
- 巨蟒python全栈开发-第5天 字典集合
- 洛谷试炼场---普及练习场
- 我深夜用 Python 跑神经网络,只为关掉台灯!
- [jruby] warbler 配置问题说明
- 关于light7使用路由经验总结及踩的坑
- 利用爬虫获取免费IP代理
- 「镁客早报」OneWeb顺利发射首批6颗互联网卫星;华为西欧负责人称公司将会获得德国5G合同...
- Xcode-关于切换窗口的快捷键
- Python机器学习:泰坦尼克号获救预测一
- 2G、3G要退出历史舞台了?为何3G比2G淘汰更快?