前面我们写的Python程序代码都没有涉及到Python函数,所有的代码都被顺序安排在一起,程序的执行过程也是顺序执行。

下面的代码是计算自然数10以内的累加和:


代码声明了变量sum并初始化为零,然后连续9条语句求自然数1至自然数9的累加和,最后输出sum变量。上面的程序代码和程序的执行结果都没有问题,但这不是最好的编程方式。因为上面代码的重复语句太多,代码看上去也不够简洁,需要使用更好的方法改变代码结构,避免编写大量的重复语句。

使用for循环语句避免重复代码的编写:


上面的程序使用for循环语句求自然数10以内的累加和,程序代码看上去简洁多了,也没有了重复语句。这是应用Python的循环语句改变了代码的结构,提高了代码的复用性。

虽然使用循环语句可以解决一些代码语句重复的问题,但是不能解决功能性代码重复的问题。看下面的程序代码:


上面的程序代码完成两个功能:一个功能是求自然数10以内的累加和并输出;第二个功能是求自然数20以内的累加和并输出。这两个功能相同,代码也几乎完全相同,只是循环次数不同,这种情况就属于功能性重复,循环可以解决代码重复的问题,但解决不了功能性重复的问题。

我们可以设想一下,在上面的程序代码中,如果我们把求自然数累加和的代码单独编写为一个代码块,自然数作为代码块的一个参数传入进去,该代码块对传入的自然数求累加和,并把求和结果返回给调用这个代码块的语句,这样就解决了程序中功能性重复的问题。

在Python语言中,Python提供了函数用来解决类似上面功能性重复的问题,其实函数的作用远不止于解决功能性重复的问题,函数是对程序逻辑进行结构化或过程化的一种编程方法,它可以将能够完成独立功能的代码块封装成易于管理的函数,这些函数可以被程序中的其它语句调用,而调用者可以把函数看成黑盒,不用考虑函数的内部结构和特性,只需传入参数和接收返回值就可以了。

在Python语言中,函数分为三部分:第一部分是函数声明,函数声明占一行语句,声明语句开头使用def关键字,在def关键字后面空格后紧跟函数的名称,函数名称后面是一对小括号,括号内是需要传入的参数,参数可以为空;第二部分是函数体,函数体可以占多行语句,函数体内包括函数注释和代码;第三部分是返回语句,如果函数没有返回值可以省略第返回语句。下图是Python函数结构图。


图 1 Python函数结构图

在Python函数结构图中,“functionname”表示函数的名称,“parameters”表示传入函数的参数,多个参数之间使用英文逗号分隔, “函数_文档字符串”是函数的注释文档,主要给出函数的功能、参数说明等信息(注释文档可以省略),“function_suite”是函数的代码,“expression”是返回的表达式或数据。

我们了解了函数结构后,就可以使用函数来解决上面程序中求自然数累加和功能重复的问题。


上面的程序代码就比前边的程序代码简洁强大多了,它可以求任意自然数以内的累加和,而且编写的代码量也很少。程序定义了函数summation,该函数完成求给定自然数以内的累加和功能,自然数由函数的参数number指定。代码语句调用函数时,直接写上函数名称即可,函数名称后面是一对小括号,需要传入的参数放在小括号内。因为summation函数返回传入自然数的累加和,因此print语句输出了函数的返回值。

现在我们已经初步掌握了Python函数的使用,后面我们会深入讨论函数的参数。