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)默 ...
随机推荐
- Iphone 消息通知(APNS)的3种方式 -- C# 和 nodejs
发送 APNS 使用 p12 文件(C#) public static bool PushWithP12(string apnToken, string message) { _log.DebugFo ...
- height 与 min-height 的继承
min-height: inherit; 继承父元素的 min-height: 80px; 但,不能继承父元素的 height: 200px; height: inherit; 能继承父元素的: he ...
- vue自定义指令v-scroll(directive)
vue开发中,很多地方如果说都用到了某一方法,我们就可以进行指令化封装,通过自定义指令来实现这里通过两个例子说明vue-Directive的使用 1.v-focus 主要用来实现页面加载进来的时候文本 ...
- 程序设计入门-C语言基础知识-翁恺-第六周:数组-详细笔记(六)
目录 第六章:数组 6-1 数组 6-2 数组计算 6.3 课后习题 第六章:数组 6-1 数组 题目:让用户输入一组整数以-1结束输入,算出这组数的平均值,并且输出大于平均值的数. 我们需要记录用户 ...
- c# 图片转流 流转文件
//----引入必要的命名空间 using System.IO; using System.Drawing.Imaging; //----代码部分----// private byte[] photo ...
- 在 Windows 安装期间将 MBR 磁盘转换为 GPT 磁盘
以 UEFI 启动的 Windows 磁盘必须是 GPT 格式.本文将介绍如何在安装 Windows 期间将磁盘从 MBR 转换成 GPT. 特别注意:操作不慎可能丢失所有数据,如果你懂得安装系统的一 ...
- JS实现动态提示框
引言 什么项目都有个需求,应开发需求,需要写一个公式编辑器选择公式的插件,下面给大家讲一下实现过程.(擦汗,强作淡定,咳,开嗓~) 看图说话 本小菜开发功能前乐于先写个需求思维导图(纯属个人爱好): ...
- Python 3 利用 Dlib 实现人脸检测和剪切
0. 引言 利用 Python 开发,借助 Dlib 库进行人脸检测 / face detection 和剪切: 1. crop_faces_show.py : 将检测到的人脸剪切下来,依次排序平 ...
- CentOS6.5安装中文支持
本人在安装CentOS6.5时选择是英文版,安装后打开文档,发现好些文档成了乱码了. 这个问题的原因是没有中文支持. 解决方法: 1.安装中文支持包 # yum groupinstall " ...
- Python——while、continue、break、while-else、or、and、not
1. while 终止while循环: (1) 改变条件,使其不成立 (2) break 应用实例1:计算1+2+3+...+100 #1.使用两个变量 count = 1 sum = 0 while ...