3.4.3 函数
函数可以让程序员编写的代码重复使用。它能大大提高工作效率。通常,如果你发现代码中某些功能需要执行很多次,这个功能很有可能需要改写为函数。
假设你编写了一个简单的程序用来计算矩形的面积和周长。用户输入矩形的高和宽,之后程序进行相应的计算。实现这个功能最简单的方法是编写一个带参数的函数,其参数分别为矩形的高和宽。之后函数将矩形的面积和周长返回给主程序。为了实现这个函数,我们用def赋值语句进行编写。def赋值语句是我们定义一个函数的方法,其语法为def函数名(参数1,参数2):
这个小程序需要你提供一些参数并返回计算的结果。可能这不是最好的例子(你可以用更少的代码计算出结果),但却很好地阐述了代码复用的思想。通过这个函数,你就明白:在程序的任何位置,只要你需要计算面积或者周长,调用AreaPerimeter函数并赋给参数“height”和“width”值即可。
在此需要注意一点:raw_input函数会返回一个字符串,即便你输入的是数字,返回的也是字符串类型的值。这也就解释了为什么在AreaPerimeter函数中height和width变量在计算前必须要进行int转换。
如果对其他语言比较熟悉的话,你会发现Python的函数与其他语言的函数在方法、功能和步骤方面都有一些不同。例如,在Python中,所有的函数都是按引用进行调用(call-by-reference)。不需要太过专业的术语,简单而言,这意味着当你给函数传递一个参数时,你只是将一个指针传递给一个变量,而不是传递数值。这种方式使得Python的内存管理更加方便。例如,当你在函数中一遍又一遍地传递列表参数时,不需要复制整个列表的内容。具体而言,当一个函数将一个列表作为参数时,你传递的只是列表首元素在内存中的位置,之后函数基于首元素的位置再查找剩余项。
函数另一个有意思的方面是:它们都是可执行的语句。这意味着一个函数实际上可以在if语句中声明和调用。虽然并不是很常见,但是这样定义和调用是合法的(有时也十分有用)。def语句可以嵌套在循环当中,嵌套在其他的def语句中,甚至嵌套在列表和字典里。
我们会在进行具体项目时回顾函数部分;现在,只需要知道它们的存在,并知道它们对你自己编写的每个程序都很实用即可。