购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.2 函数定义

在本书前面章节的示例中已经调用过许多内置函数( int float print input type sum len min max )和 statistics 模块中的一些函数( mean median mode ),每个函数都执行了一项明确定义的任务。除了这些已经定义好的函数外,我们还会经常定义和调用 自定义函数 。下面的代码段定义了一个 square 函数,用于计算其参数的平方,然后调用了两次 square 函数,第一次计算 int 7 的平方(得到 int 49 ),第二次计算 float 2.5 的平方(得到 float 6.25 ):

000

在代码段 [1] 中定义函数 square 的语句只需写一次,但可以根据需要在整个程序中多次调用这个函数。如果使用非数值类型的参数(如 'hello' )调用 square 会导致 TypeError ,因为取幂运算符( ** )只能作用于数值型的操作数。

定义一个自定义函数

函数定义 (如代码段 [1] 中的 square )以关键字 def 开头,后跟函数名( square )、一对括号和一个冒号( : )。按照惯例,与变量标识符类似,函数名称应以小写字母开头,在多词名称中,应使用下划线分隔每个单词。

括号中包含 参数列表 ,各 参数 以逗号进行分隔,表示函数执行任务时所需的数据。函数 square 只有一个参数 number ,是需要计算平方的值。如果括号为空,则该函数执行任务时不需要参数。

冒号( : )后面缩进的行是函数的 语句块 ,它包含一个可选的文档字符串,接着是执行函数任务的语句。后面会介绍函数的语句块和控制语句套件之间的区别。

自定义函数的文档字符串

Style Guide for Python Code 指出,在函数的语句块中,第一行应该是一个文档字符串,用来简要说明函数的用途:

000

要提供更详细的信息,可以使用多行文档字符串。 Style Guide for Python Code 建议从简短说明开始,后跟空行和其他详细信息。

将结果返回给函数的调用者

当一个函数执行完成时,会将控制权返回给它的调用者,即调用该函数的代码行。在 square 的函数块中, 返回 语句

000

首先计算 number 的平方,然后终止该函数并将结果返回给调用者。在上面的例子中,第一个调用者在代码段 [2] 中,因此IPython在 Out[2] 中显示结果。第二个调用者在代码段 [3] 中,因此IPython在 Out[3] 中显示结果。

函数调用也可以嵌入表达式中。下面的代码会先调用函数 square ,然后用 print 显示结果:

000

还有另外两种方法可以将控制权从函数返回给调用者:

局部变量

虽然上面的例子没有在函数 square 的语句块中定义变量,但事实上Python是允许在函数的语句块中定义变量的。在函数的语句块中定义的参数和变量都是 局部变量 ,仅在函数执行时存在,且只能在函数内部使用。尝试访问函数语句块之外的局部变量会导致 NameError ,表示该变量未定义。

通过IPython的帮助机制访问函数的文档字符串

IPython可以帮助我们了解想要在代码中使用的模块和函数,甚至可以是IPython本身。例如,想要知道如何使用某个函数,可以查看该函数的文档字符串,查看的方法是键入函数的名称,后跟 问号 ? ),如下所示:

000

对于函数 square ,显示的信息包括:

如果函数的源代码允许通过IPython访问,可以使用“ ?? ”显示函数定义的完整源代码,例如在当前会话中定义的函数或从 .py 文件导入会话中的函数,如下:

000

如果不允许从IPython访问源代码,“ ?? ”只显示其文档字符串。

如果文档字符串的内容可以在当前窗口中完整显示,IPython将显示下一个 In[] 提示符。如果文档字符串太长无法在当前窗口全部显示,IPython会在窗口底部显示冒号( : )表示还有更多内容,按 空格 键可以显示下一屏。使用向上或向下方向键可以在文档字符串中向后或向前导航。IPython在文档字符串的末尾显示( END )。在任何“ : ”或( END )提示符处按 q (表示quit)可返回到下一个 In[] 提示。如需了解IPython的功能,可以在任何 In[] 提示符下键入 ? ,按Enter键,然后阅读帮助文档的概述。 7yiRVyAnYhiUOOHku86g4t7vSBq9/DvZGh8L6vskV/+M/ubXwHmhiALfF9YHRAeM

点击中间区域
呼出菜单
上一章
目录
下一章
×