「Python程序设计」模块式编程:函数
小时候,我们都或多或少的玩过一些积木玩具。通过把动物,或者是人物的各个组成部分,一小块,一小块地搭建起来,最终,就组成了我们最终想要的形状。这有点类似于乐高积木,通过把固定的块状物,进行拼接,就可以拼接出各式各样的类型。
我们的程序设计,也是一样的,特别是大的软件项目,还有大的软件工程,都需要进行模块化设计和开发。这有点像是分而治之的思想,把一个大的,很难一次性解决的问题,分解成多个小的,容易解决的部分。然后,把这些小的问题给解决了,全部解决完成之后,我们的大问题,自然也就解决了。
我们这里要探讨的函数,就是把大的软件项目,模块化,分解成小的,可以单独处理的模块。通过搭建这些模块,最终形成我们的整个项目。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
定义一个函数
你可以定义一个由自己想要功能的函数,以下是简单的规则:
1、函数代码块,以 def 关键词开头,后接函数标识符名称和圆括号 ()。
2、任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
3、函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
4、函数内容以冒号 : 起始,并且缩进。
5、return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。
函数定义的结构,如下图所示。
这里,def 关键字紧跟着的函数名称 max,就是函数的入口。return 语句,就相当于函数的出口,也就是结束函数时的操作。
我们来看一个自定义函数的例子。
我们通过自定义一个hello函数,封装了 print 打印过程,这样,我们就可以直接调用hello()函数,实现打印字符串的操作。
我们还可以给函数带上参数,也就是函数内部,需要处理的变量和数据。具体来看一个例子。
这里,我们定义了一个求最大值的函数max,传入了两个参数a和b。通过赋予a和b的值,调用max函数,就可以实现返回最大值的操作。
函数调用
定义一个函数:给了函数一个名称,指定了函数里包含的参数,和代码块结构。
这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行。
来看一个函数调用的例子。
从上面的过程可以看到,函数可以多次进行调用。只要修改传入函数的参数值,函数就能对不同的参数,进行处理操作。
匿名函数
Python 使用 lambda 来创建匿名函数。
所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
1、lambda 只是一个表达式,函数体比 def 简单很多。
2、lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封装有限的逻辑进去。
3、lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
4、虽然 lambda 函数看起来只能写一行,却不等同于 C 或 C++ 的内联函数,内联函数的目的是调用小函数时不占用栈内存从而减少函数调用的开销,提高代码的执行速度。
匿名函数的语法
lambda 函数的语法只包含一个语句,如下所示:
lambda [arg1 [,arg2,.....argn]]:expression
我们来看一个匿名函数的例子。
可以看出,匿名函数的结构比较简单,只有一个表达式,也就是定义变量a,并且进行变量a加上10的操作。匿名函数调用,和普通函数一致,传入参数的过程,也一致。
再来看一个匿名函数设置两个参数的例子。
我们可以将匿名函数封装在一个函数内,这样可以使用同样的代码来创建多个匿名函数。
以下实例将匿名函数封装在 myfunc 函数中,通过传入不同的参数来创建不同的匿名函数:
return 语句
return [表达式] 语句用于退出函数,选择性地向调用方,返回一个表达式。不带参数值的 return 语句返回 None,相当于没有返回过程。函数体执行完成之后,自动结束函数。
之前的例子都没有示范如何返回数值,以下实例演示了 return 语句的用法:
以上就是函数部分的所有内容。