在本章中,你将学习编写函数 。函数是带名字的代码块,用于完成具体的工作。
要执行函数定义的特定任务,可调用该函数。需要在程序中多次执行同一项任务时,你无需反复编写完成该任务的代码,而只需调用执行该任务的函数,让Python运行
其中的代码。你将发现,通过使用函数,程序的编写、阅读、测试和修复都将更容易。
在本章中,你还会学习向函数传递信息的方式。你将学习如何编写主要任务是显示信息的函数,还有用于处理数据并返回一个或一组值的函数。最后,你将学习如何
将函数存储在被称为模块 的独立文件中,让主程序文件的组织更为有序。
定义函数
下面是一个打印问候语的简单函数,名为greet_user() :
❶ def greet_user():
❷ """显示简单的问候语"""
❸ print("Hello!")
❹ greet_user()
这个示例演示了最简单的函数结构。❶处的代码行使用关键字def 来告诉Python你要定义一个函数。这是函数定义 ,向Python指出了函数名,还可能在括号内指出函数为完成其
任务需要什么样的信息。在这里,函数名为greet_user() ,它不需要任何信息就能完成其工作,因此括号是空的(即便如此,括号也必不可少)。最后,定义以冒号结尾。
紧跟在def greet_user(): 后面的所有缩进行构成了函数体。❷处的文本是被称为文档字符串 (docstring)的注释,描述了函数是做什么的。文档字符串用三引号括
起,Python使用它们来生成有关程序中函数的文档。
代码行print(“Hello!”) (见❸)是函数体内的唯一一行代码,greet_user() 只做一项工作:打印Hello! 。
要使用这个函数,可调用它。函数调用 让Python执行函数的代码。要调用 函数,可依次指定函数名以及用括号括起的必要信息,如❹处所示。由于这个函数不需要任何信息,因
此调用它时只需输入greet_user() 即可。和预期的一样,它打印Hello! :
Hello!
向函数传递信息
只需稍作修改,就可以让函数greet_user() 不仅向用户显示Hello! ,还将用户的名字用作抬头。为此,可在函数定义def greet_user() 的括号内添加username 。通
过在这里添加username ,就可让函数接受你给username 指定的任何值。现在,这个函数要求你调用它时给username 指定一个值。调用greet_user() 时,可将一个名字
传递给它,如下所示:
def greet_user(username):"""显示简单的问候语"""print("Hello, " + username.title() + "!")
greet_user('jesse')
代码greet_user(‘jesse’) 调用函数greet_user() ,并向它提供执行print 语句所需的信息。这个函数接受你传递给它的名字,并向这个人发出问候:
Hello, Jesse!
同样,greet_user(‘sarah’) 调用函数greet_user() 并向它传递’sarah’ ,打印Hello, Sarah! 。你可以根据需要调用函数greet_user() 任意次,调用时无论传
入什么样的名字,都会生成相应的输出。
实参和形参
前面定义函数greet_user() 时,要求给变量username 指定一个值。调用这个函数并提供这种信息(人名)时,它将打印相应的问候语。
在函数greet_user() 的定义中,变量username 是一个形参 ——函数完成其工作所需的一项信息。在代码greet_user(‘jesse’) 中,值’jesse’ 是一个实参 。实参是
调用函数时传递给函数的信息。我们调用函数时,将要让函数使用的信息放在括号内。在greet_user(‘jesse’) 中,将实参’jesse’ 传递给了函数greet_user() ,这个
值被存储在形参username 中。
注意 大家有时候会形参、实参不分,因此如果你看到有人将函数定义中的变量称为实参或将函数调用中的变量称为形参,不要大惊小怪。