学习笔记9------函数①

1.函数定义

1.1什么是函数呢?

函数就是将一堆代码进行重用的一种机制。函数就是一段代码,一个函数就像一个专门做这件事的人,我们调用它来做一些事情,它可能需要我们提供一些数据给它,它执行完成后可能会有一些执行结果给我们。要求的数据就叫参数,返回的执行结果就是返回值。
##1.2函数基本语法
func 函数名(){
函数体
}
通过func关键字来定义函数,函数名后面必须加括号

1.3普通参数列表

我们将给函数提供的这些数据称为参数,那么我们自己定义的函数是否可以有参数呢?完全可以,下面我们就看一下怎样给自己定义的函数提供参数。
给函数传递参数分为两种情况:第一种情况为普通参数列表,第二种情况为不定参数列表。

package main
import "fmt"
func Test(a int,b,int){
 Fmt.Println(“a=%d,b=%d”,a,b)
}
func main(){
  Test(3,5)
}

首先我们定义了一个Test()函数,该函数有两个参数,a,和b .并且这两个参数的类型都是整型的(这两个参数我们称之为形参),在调用Test()函数时,我们将3传递给参数a,将5传递给参数b(在调用时输入的3和5这个参数我们称之为实参)。我们把这个过程称为参数的传递,并且在Test()函数中输出两个变量的值。

1.4不定参数列表

 根据前面的讲解,我们都知道了,在定义函数的时候根据需求指定参数的个数和类型,但是有时候如果无法确定参数的个数呢?

举例说明:上一小节我们写过一个求两个整数之和的函数,但是在实际的开发中,也会经常遇到这样的情况,就是项目经理求你写一个函数,实现整数的和。在这个要求中,项目经理并没有说清楚到底是有几个整数,那么我们应该怎样确定该函数的参数呢?就用接下来给大家讲解的“不定参数列表”来解决这个问题。那么我们可以通过如下的方式来定义函数:

package main
import "fmt"
func Test(args  ...int){
 for i:=0;i<len(arg);i++{
 fmt.Println(arg[i])
} 
}
func main(){
  Test(1)


Test(2,3)
Test(3,4,5)
}

Test()函数的参数名字叫args(参数的名字可以随便起),类型是整型的。但是,大家一定要注意,在args后面跟了三个点,就是表示该参数可以接收0或多个整数值。所以,args这个参数我们可以想象成是一个集合(类似数学中集合),可以存放多个值。
所以,在Test()函数内,我们通过以前学习的一个函数叫len(),来计算出args这个集合中存储了多少个数(如果args这个集合中存储了5个数,那么len()函数的值就是5),通过for循环将该集合中的数全部输出,在输出时我们通过下标的方式将args集合中的值输出的。所谓的下标,我们可以理解成就是一个编号,对存储在args这个集合中每个数字都加上了编号。在这里要注意的是:下标是从0开始计算的。如下图所示这里写图片描述

args集合中存储了5,6,7三个数,对应的下标(编号),分别是0,1,2. 如果该集合中存储了4个数,那么第4个数的编号就是3.
现在取出第一个数就是args[0]值为5,第二个数args[1]值为6,以此类推。

在main()函数中,我们分别调用了三次Test()函数,在第一次调用时,我们只传递了一个参数1,那么形参args中也就只有1,所以只循环了一次就将该值输出。第二次调用时,传递了两个参数,循环两次输出,第三次调用,传递了三个参数,循环了三次输出。

在Test()函数中,我们除了使用len()函数,计算出集合中存储的数据的个数,然后再输出以外,还有另外一种输出的方式就是使用range关键字。如下所示:

package main
import "fmt"
func Test(args  ...int){
for i,data:=range args{
 fmt.Println(“编号为:”,i)
fmt.Println(“值为:”,data)
}
}

range会从集合中返回两个数,第一个是对应的坐标,赋值给了变量i,第二个就是对应的值,赋值了变量data
所以以上两种输出集合的方式,大家在以后的开发过程中都可以使用。

当然在使用不定参数时,要注意几个问题:
第一:一定(只能)放在形参中的最后一个参数。
第二:在对函数进行调用时,固定参数必须传值,不定参数可以根据需要来决定是否要传值。

最后我们来实现一下,一开始提出的“写一个函数,实现整数的和”这个问题,这个函数现在实现起来就非常简单了。

package main
import "fmt"
func Test(args  ...int){
var sum int
Fot _,data:=range args{
Sum+=data
}
fmt.Println(sum)
}
func main(){
Test(3,5,7,8,8)
}

在以上的案例中,我们用到了一个下划线( _ ),该下划线表示匿名变量,丢弃数据不进行处理,也就是任何赋予它的值都会被丢弃。
在前面讲解的时候,我们只是说过匿名变量的语法,没有讲解其应用的场景,那么大家可以通过该案例体会出匿名变量的应用场景。

猜你喜欢

转载自blog.csdn.net/weixin_42927934/article/details/81876968