我们在调用函数的时候,主函数和调用函数之间总是离不开数据的传递,有了数据的传递,也就是参数的传递。参数的作用是用来传递数据给函数使用。
打个比方来说,我们买来了一个榨汁机,当我们加入苹果的时候会出来苹果汁,加入西瓜的时候会出来西瓜汁,参数就起到这样一个作用,参数通过主函数传递到被调用函数,然后被调用函数会返回给我们一个结果。
下面我们来学习参数的传递。
1. 形式参数和实际参数
要学习函数的参数传递,我们首先要了解什么是形式参数和实际参数。我们继续拿上面的例子来说,我们在榨汁机中有一个容器来装水果,我们将水果放在这个容器里,然后榨汁器开始运转,形式参数和实际参数也类似这样的关系。
形式参数为我们定义函数的时候再括号中定义的参数,我们在函数的内部会使用这个参数进行代码的编写,而实际参数为函数调用的时候传进来的参数,函数返回的结果是根据这个实际参数来代替形式参数。
看下面的例子:
>>> A = 30 >>> def get_salary(days): ... salary = days * 300 ... print(salary) ... >>> get_salary(A) 9000
在这上面这个例子中,函数在创建的时候使用的参数days为形式参数,在我们调用函数的时候,A即为实际参数,实际要带入到函数中使用的参数。
2. 位置参数
我们在创建函数的时候可以在括号中定义多个形式参数,我们在调用的时候,参数的数量和位置需要和创建的保持一致。
1) 参数的数量不一致
如果我们创建的函数中有2个形式参数,而我们调用的时候只使用了1个实际参数,会是什么样的结果呢,看下面的例子。
>>> def get_message(address,number): ... print(address,number) ... >>> get_message('苏州') Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: get_message() missing 1 required positional argument: 'number'
我们可以发现当实际参数的数量不等于形式参数的数量时候,会抛出异常,具体的意思为缺少一个必要位置的参数number。
2) 参数的位置不一致
当参数的位置不一致的时候会导致出现两种错误,一种是直接报错,因为我们在传参的时候会根据参数的性质而定义不同的类型,因此数据类型的错误会抛出异常。
另外一种错误是传入的参数的数据类型是对的,但是位置是错的,这样会出现错误的输出结果。
3. 关键字参数
为了提高程序的可读性,在函数调用的时候还可以使用关键字参数调用。
我们通过计算容器的体积来了解关键字参数。
>>> def volume(length,width,height): ... volume = length * width * height ... print('体积为:',volume) ... >>> volume(length=20,width=30,height=3) 体积为: 1800
使用关键字参数可以省去定义变量的过程,直接在函数调用的时候给参数进行赋值,然后传递到函数当中,最后返回结果。在这种传递方式中,参数位置的不同是不影响输出结果的。
4. 参数默认值
当我们定义一个函数的时候,可以给函数的参数定义一个初始值,这样在我们调用函数的时候如果没有给出实际参数,那么函数会使用默认参数。
看下面的例子:
>>> def volume(length=100,width=100,height=10): ... volume = length * width * height ... print(volume) ... >>> volume()#不给出实际参数的时候会使用默认参数100000 >>> volume(10,10,10)#给出实际参数会传递实际参数给出输出结果 1000
通过上面的例子,如果我们在创建函数的时候已经给出了默认值,那么我们在使用函数的时候如果不给出实际参数则会自动使用默认参数。
5. 可变参数
在Python中函数的参数个数是可以变化的,也就是说参数的数量可以是不确定的,这种参数被称为可变参数。可变参数分为两种,一种是参数前加*,这种方式的可变参数在传递的时候是以元组的形式传递,一种是参数前加**,这种方式的可变参数在传递的时候以字典的形式传递,我们主要介绍一下第一种方式。
看下面的例子:
>>> def add_number(*number): ... add_num = 0 ... for i in number: ... add_num += i ... print(add_num) ... >>> add_number(1,2,3,4,5) 15
使用可变参数的时候,这些参数会被存放在一个元组中传递到函数里,因此我们要使用这些参数的时候可以使用遍历或者索引值进行使用。
函数的参数传递大致就是这些,想要学好函数,一定要掌握好参数的传递,参数的正确传递在函数的使用过程中至关重要。
1037 | [编程入门]宏定义的练习 |
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程