前言:本节笔者将会介绍函数,函数是带名字的代码块,用于完成具体工作。要执行函数定义的特定任务,可调用该函数。需要在程序中多次执行同一个任务时,无须反复编写完成该程序代码,只需要调用执行该任务的函数,让Python运行其中的代码即可。
8.1、定义函数
使用def来定义一个函数,def后面为函数名函数名后面的括号则是完成什么样的任务需要什么样的信息,而函数名后面是一个冒号,冒号后面紧跟着函数体,下面来看看具体的例子:
输出:
(代码分析:这里冒号后面是函数体的文本描述形式,即文档字符串,python使用它们来生成有关程序中函数的文档)
(2)、向函数传递信息
输出:
笔者以本题为例,在greet_user(username)中将username作为形参,即函数完成工作所需的一个信息。而greet_user(‘jesse’)中‘jesse’作为一个实参,即调用函数时传递给函数的一个信息。8.2、传递实参
(1)、位置实参
调用函数时, Python必须将函数调用中的每个实参都关联到函数定义中的一个形参。为此,最简单的关联方式是基于实参的顺序。这种关联方式称为位置实参为明白其中的工作原理,来看一个显示宠物信息的函数。这个函数指出一个宠物属于哪种动物以及它叫什么名字,如下所示:
输出:
(位置实参的顺序很重要,我们在调用函数时在()内要对应其输出形式,否则最后打印出的则不是我们想要的函数形式)8.3、关键字实参
关键字实参是传递给函数的名称键值对、因为直接在实参中将名称和值关联起来,所以向函数传递实参时不会混淆,下面来看看一个例子:
输出:
事实上,如果调用的是函数describe_pet(pet_name = ‘harry’,animal_type = ‘hamester’)这种形式的,我们得到的输出结果还是一样的,因为我们已经将关键字和值进行了配对。8.3、返回值
函数并非总是直接显示输出,它还可以处理一些数据,并返回一个或一组值。函数返回的值称为返回值,在函数中可以使用return()语句将值返回到调用函数的代码行。返回值能让你的程序中大部分繁重工作转移到函数中去完成从而简化主程序。
(1)下面来看看一个使用return()来返回的函数:
输出:
需要储存大量的人名时,像get_formatted_name()这样的函数会非常有用。(2)、让实参变成可选择性的
在一些时候,我们需要根据不同的情况输出一些值,这时候我们需要用到前面所学到的判断语句,笔者在接下来的演示中会使用if语句。下面的这个例子可以看出中间名是可选的:
输出:
(代码分析:并非所有的人都有中间名,但如果调用这个函数时只提供了名和姓,它将不能正确运行。为了让中间名变成可选的,可给形参 middle_name指定一个空的默认值,并在用户没有提供中间名时不使用这个形参。为了让get_formatted_name()在有提供中间名时依然可行,可将形参middle_name的默认值设置为空字符串,并将其移到列表末尾。)(3)、返回字典
函数可以返回任意类型的值,包括字典和列表等较为复杂的数据结构。例如,下面的函数接受姓名的组成部分,并返回一个表示人的字典:
输出:
如果你想存储年龄,那么修改后可以这样表达:
输出:
(4)、结合使用函数和while循环
如果你需要设计一个问候用户的函数,且需要用到笔者前面所介绍的Python结构。这时笔者会设计以下的结构:
输出:
总结:本部分学习到此结束,本节笔者主要学习了函数定义,传递实参,返回值三大部分,后面会继续进行函数部分的学习。