Julia - 函数的参数传递
不定参数
不定参数的函数也称变参函数
函数的参数可以被定义成任意个
可以在最后一个参数后紧跟省略号“...”来定义变参函数
julia> bar(x, y, z...) = (x, y, z)
bar (generic function with 1 method)
对变参函数进行参数传递
julia> bar(1)
ERROR: MethodError: no method matching bar(::Int64)
Closest candidates are:
bar(::Any, ::Any, ::Any...) at REPL[1]:1
Stacktrace:
[1] top-level scope at none:0 julia> bar(1, 2)
(1, 2, ()) julia> bar(1, 2, 3)
(1, 2, (3,)) julia> bar(1, 2, 3, 4)
(1, 2, (3, 4)) julia> bar(1, 2, 3, 4, 5)
(1, 2, (3, 4, 5))
最前的两个参数 x,y 为普通的参数,需要对其进行传值,不然就报错了
变量 z 是尾随的可迭代的参数集合,其参数个数为 0 或多个,返回的是一个多元组
函数调用时,也可以使用“...”
julia> bar(x, y, z...) = (x, y, z)
bar (generic function with 1 method) julia> z = (3, 4)
(3, 4) julia> bar(1, 2, z...)
(1, 2, (3, 4))
多元组的值完全按照变参函数的定义进行内插,也可以不完全遵守其函数定义来调用
julia> bar(x, y, z...) = (x, y, z)
bar (generic function with 1 method) julia> z = (2, 3, 4)
(2, 3, 4) julia> bar(1, z...)
(1, 2, (3, 4)) julia> z = (1, 2, 3, 4)
(1, 2, 3, 4) julia> bar(z...)
(1, 2, (3, 4))
被内插的对象也可以不是多元组
julia> bar(x, y, z...) = (x, y, z)
bar (generic function with 1 method) julia> z = [3, 4]
2-element Array{Int64,1}:
3
4 julia> bar(1, 2, z...)
(1, 2, (3, 4)) julia> z = [2, 3, 4]
3-element Array{Int64,1}:
2
3
4 julia> bar(1, z...)
(1, 2, (3, 4)) julia> z = [1, 2, 3, 4]
4-element Array{Int64,1}:
1
2
3
4 julia> bar(z...)
(1, 2, (3, 4))
可选参数
函数的参数可以设置默认值
julia> function f(x, y=3)
x + y
end
f (generic function with 2 methods) julia> f(4)
7 julia> f(4, 5)
9
定义了一个函数 f() ,有两个参数,一个是参数 x,一个是默认值为 3 的参数 y
调用该函数的时候,如果只传入一个值,则这个值赋给参数 x,参数 y 为默认值 3
如果传入两个值,则第一个值赋给参数 x,第二个值赋给参数 y,覆盖了默认值 3
关键字参数
使用关键字参数的函数,在函数签名中使用分号来定义
julia> function f(name, age; sex="male", country="jp")
println(name)
println(age)
println(sex)
println(country)
end
f (generic function with 1 method) julia> f("jack", 23)
jack
23
male
jp julia> f("jack", country="us",22, sex="female")
jack
22
female
us julia> f("jack", country="us", sex="female", 34)
jack
34
female
us
额外的关键字参数,可以像变参函数中一样,使用“...”来匹配
function f(x; y=0, args...)
###
end
在函数 f 内部, args 可以是 (key,value) 多元组的集合,其中 key 是符号
可以在函数调用时使用分号来传递这个集合,如 f(x, z=1; args...),这种情况下也可以使用字典
关键字参数的默认值仅在必要的时候从左至右地传值(当对应的关键字参数没有被传递),所以默认的(关键字参数的)表达式可以调用在它之前的关键字参数
默认值的求值作用域
可选参数和关键字参数的区别在于它们的默认值是怎样被求值的
当可选的参数被求值时,只有在它之前的的参数在作用域之内
当关键字参数的默认值被计算时, 所有的参数都是在作用域之内
function f(x, a=b, b=1)
###
end
在 a=b 中的 b 指的是该函数的作用域之外的 b ,而不是接下来的参数 b
Julia - 函数的参数传递的更多相关文章
- C语言中如何将二维数组作为函数的参数传递
今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不 ...
- C++函数的参数传递机制以及参数的类型选择
C++primer之函数的参数传递以及参数的类型 一:函数的基本知识 (1) 函数要素:返回类型,函数名字,形参(参数之间用逗号隔开) (2) 函数调用机制:我们通过调用运算符来执 ...
- 深入剖析C/C++函数的参数传递机制
2014-07-29 20:16 深入剖析C/C++函数的参数传递机制 C语言的函数入口参数,可以使用值传递和指针传递方式,C++又多了引用(reference)传递方式.引用传递方式在使用上类 ...
- Python学习笔记7-把函数当参数传递、指定可变参数
把函数当参数传递 # 函数参数传递 # 面向对象编程就是把对象传来传去 # 面向函数编程就是把函数传来传去 def mytest(num): return num * 2 # # 不光可以传递变量,还 ...
- JQuery实战中遇到的两个小问题$(document).ready() 、bind函数的参数传递问题
一.$(document).ready() 与 window.onload的区别 1.执行时间 window.onload 必须等到页面内所有元素(包括图片 css js等)加载完毕后才会执行. $( ...
- JS循环中使用bind函数的参数传递问题
JS循环中使用bind函数的参数传递问题,问题代码如下: for (var sc in result) { var tempp = '<div class="sidebar_todo_ ...
- shell函数【参数传递及输入输出】&内置函数
Linux——shell脚本基础3:shell函数[参数传递及输入输出]&内置函数 函数定义 1 退出状态 1 参数传递 2 标准IO 2 脚本调试 2 AND&OR 3 内置命令补充 ...
- js中函数的参数传递
js中所有函数的参数传递都是按值传递,也就是说把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样,基本类型值的传递如同基本类型变量的复制一样,而引用类型的值的传递则如同引用类型 ...
- Python中函数的参数传递与可变长参数
转自旭东的博客原文 Python中函数的参数传递与可变长参数 Python中传递参数有以下几种类型: (1)像C++一样的默认缺省函数 (2)根据参数名传参数 (3)可变长度参数 示例如下: (1)默 ...
随机推荐
- FFmpeg再学习 -- 硬件加速编解码
为了搞硬件加速编解码,用了一周时间来看 CUDA,接下来开始加以总结. 一.什么是 CUDA (1)首先需要了解一下,什么是 CUDA. 参看:百度百科 -- CUDA 参看:CUDA基础介绍 参看: ...
- No module named 'cv2'出错
当在python 3.6里运行课程里的强化学习程序时,出现如下出错,怎么办呢? >>> = RESTART: D:\work\csdn\tensorflow\DeepLearning ...
- 基于sklearn进行文本向量化
sklearn中,计数向量化用CountVectorizer,tfidf向量化用TfidfVectorizer: import pickle from sklearn.feature_extracti ...
- 基于Ubuntu16.04的GeForce GTX 1080驱动安装,遇到的问题及对应的解决方法
1.在主机上插上GPU之后,查看设备: $ nvidia-smi Tue Dec :: +------------------------------------------------------- ...
- web前端开发中的命名规范
(一)主体 头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左右中: ...
- erlang http post 发送数据请求
ibrowse:send_req("http://127.0.0.1/NativePhone.ashx", [{"Content-Type", "ap ...
- js实现图片上传
//上传图片 function uploadImg(){ //loading $("#loading").ajaxStart(function() { $(this).show() ...
- Uoj 22 外星人
Uoj 22 外星人 注意到一个数只有 \(\%\) 了小于等于自己的数时,才可能有变化,否则可以随意安排,不会对最后最优解造成影响. 用 \(f[x]\) 表示给一个数 \(x\) ,仅用 \(a[ ...
- bzoj 4570 妖怪
bzoj 4570 妖怪 正解应该是 \(O(nlogn)\) 的凸包,但被我的 \(O(100n)\) 的三分水过去了. 记 $x=\frac b a $ ,显然有 \(strength_i=ATK ...
- 剑指offer第五章
剑指offer第五章 1.数组中出现次数超过一半的数 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组 ...