第七章:函数
7.1 函数的概念
函数可以理解为实现某种功能的代码块,这样当程序中需要这个功能时就可以直接调用,而不必每次都编写一次。这就好比生活中使用计算器来计算,当需要计算时,直接使用计算器输入要计算的数,计算完成后显示计算结果,而不必每次计算都通过手写演算出结果。
7.2 函数的定义
在上述语法格式中,需注意以下几点:
def(即define,定义)为关键字,表示定义一个函数。
函数名是一个标识符,注意不能与关键字重名。
小括号之间可以用于定义参数,参数是可选的,但小括号不可少。
函数体以冒号起始,并且缩进。
函数体的第一行语句可以选择性地使用文档字符串用来存放函数说明。
return [表达式]结束函数,将表达式的值返回给调用者,也可以省略。
7.3 函数的定义
7.3.1 位置参数
位置参数是指函数调用时传递实参的顺序与定义函数的形参顺序一致,如例所示。
7.3.2 关键参数
关键参数是指通过对形参赋值传递的参数。关键参数允许函数调用时传递实参的顺序与定义函数的形参顺序不一致,因为 Python解释器能够用形参名匹配实参值,使用户不必记住位置参数的顺序,如例所示
7.3.3 默认参数
如果在函数定义时参数列表中的某个形参有值,就称这个参数为默认参数。注意默认参数必须放在非默认参数的右侧,否则函数将出错,如例所示。
7.4 函数的返回值
函数调用时的参数传递实现了从函数外部向函数内部输入数据,而函数的return语句实现了从函数内部向函数外部输出数据。
此处需注意,如果函数定义时省略return语句或者只有return而没有返回值,则Python将认为该函数以“return None”结束,None代表没有值,如例所示。
7.5 变量的作用域
变量起作用的代码范围称为变量的作用域,与变量定义的位置密切相关,按照作用域的不同,变量可分为局部变量和全局变量。
7.5.1 局部变量
7.5.2 全局变量
7.6 函数的嵌套调用
在例中,第6行在fun2()函数中调用fun1()函数,程序执行时会跳转到fun1()函数处去执行,执行完fun1()后,接着执行fun2()函数中剩余的代码,如图所示。
7.7 函数的递归调用
在函数的嵌套调用中,一个函数除了可以调用其他函数外,还可以调用自身,这就是函数的递归调用。递归必须要有结束条件,否则会无限地递归(Python默认支持997次递归,多于这个次数将终止)。