函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,编程中的函数在英文中也有很多不同的叫法。在BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method。
定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。
使用函数可以简化代码,提高代码的复用性,提高代码可扩展性。
1、定义函数
例:定义函数
要想调用已经定义好的函数,只需要通过 函数名() 即可完成调用
有时需要添加对函数的说明,我们利用文档字符串进行添加。
例:给函数添加文档说明
2、定义带有参数的函数
为了更好的完成任务,定义的参数有时需要传递参数来完成任务,因此,在定义函数时,需要将参数传递给函数。
例:定义带参数的函数,计算两个数字的和
例:调用带参数的函数
调用函数时传递的参数为实参,定义函数时的参数为形参,调用函数后,实参会按照顺序传递给形参,从而完成代码的执行。
3、函数参数的类型
(1)缺省参数
调用函数时,缺省参数的值如果没有传入,则被认为是默认值,如果传入了,则使用实参的值。
例:函数定义缺省参数
(2)不定长参数
有时可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,声明时不会命名。
例:定义不定长参数函数
加了星号(*)的变量args会存放所有未命名的变量参数,args类型为元组;而加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs类型为字典。
3、局部变量与全局变量
(1)局部变量
局部变量,就是在函数内部定义的变量,不同的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响。局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储,这就是它的作用。
例:定义局部变量
(2)全局变量
如果一个变量,既能在一个函数中使用,也能在其他的函数中使用,这样的变量就是全局变量
例:定义全局变量
在函数外边定义的变量叫做全局变量,全局变量能够在所有的函数中进行访问。当全局变量与局部变量名字相同时,局部变量会覆盖全局变量。
例:全局变量与局部变量名称相同
要想在函数中修改全局变量需要使用global关键字,指明函数中使用的是全局变量。
例:使用global修改全局变量
如果在函数中修改全局变量,那么就需要使用global进行声明,否则出错。
在函数中不使用global声明全局变量时不能修改全局变量的本质是不能修改全局变量的指向,即不能将全局变量指向新的数据。
对于不可变类型的全局变量来说,因其指向的数据不能修改,所以不使用global时无法修改全局变量。
对于可变类型的全局变量来说,因其指向的数据可以修改,所以不使用global时也可修改全局变量。