接前面的文章:
Python基础入门知识(1)
Python基础入门知识(2)
Python基础入门知识(3)
Python基础入门知识(4)
Python基础入门知识(5)
Python基础入门知识(6)
Python基础入门教学
2 Python的基础知识
2.13 函数
2.13.1 定义函数
我们先来看一个代码,然后再来解释定义函数的意思。
例如,我们打印一个问候语的简单函数:
def greet_user():
"""显示简单的问候语"""
print("Hello!")
greet_user()
第一行代码中的关键字def,就是用来告诉Python我们要定义一个函数。
函数定义的意思是,向Python指出函数名,还可能在括号内指出函数为完成其任务需要什么样的信息。而括号里面的内容就是参数列表,参数列表可以没有。另外要注意的是,在def这一行的最后,要有冒号(:),且是英文的冒号。
紧跟在def后面的所有缩进行构成了函数体。
“”" “”"”这里的文本是被称为文档字符串(docstring)的注释,描述了函数是做什么的。文档字符串用三引号括起,Python使用它们来生成有关程序中函数的文档。
代码行print(“Hello!”)是函数体内的唯一一行代码,它的工作就是打印Hello!。
要使用这个函数,可调用它,见最后一行代码,greet_user()。调用函数greet_user(),就可以让Python执行函数的代码。要调用函数,可依次指定函数名以及用括号括起的必要信息。
输出:
Hello!
2.13.1.1 向函数传递信息
我们稍作修改,让函数greet_user()不仅向用户显示Hello!,还将用户的名字用作抬头。
def greet_user(username):
"""显示简单的问候语"""
print("Hello, "+username.title()+"!")
greet_user('jesse')
输出:
Hello, Jesse!
2.13.1.2 实参和形参
以上面的代码为例:
在函数greet_user()的定义中,变量username是一个形参——函数完成其工作所需的一项信息。在代码greet_user(‘jesse’)中,值’jesse’是一个实参。实参是调用函数时传递给函数的信息。我们调用函数时,将要让函数使用的信息放在括号内。在greet_user(‘jesse’)中,将实参’jesse’传递给了函数greet_user(),这个值被存储在形参username中。
2.13.2 传递实参
鉴于函数定义中可能包含多个形参,因此函数调用中也可能包含多个实参。向函数传递实参的方式很多,可使用位置实参,这要求实参的顺序与形参的顺序相同;也可使用关键字实参,其中每个实参都由变量名和值组成;还可使用列表和字典。下面来依次介绍这些方式。
2.13.2.1 位置实参
在我们调用函数时,Python必须将函数调用中的每个实参都关联到函数定义中的一个形参。为此,最简单的关联方式是基于实参的顺序。这种关联方式被称为位置实参。
例如,我们有一个显示宠物信息的函数。这个函数指出一个宠物属于哪种动物以及它叫什么名字,如下所示:
def describe_pet(animal_type, pet_name):
"""显示宠物的信息"""
print("\nI have a "+animal_type+".")
print("My "+animal_type+"'s name is "+pet_name.title()+".")
describe_pet('hamster','harry')
输出:
I have a hamster.
My hamster's name is Harry.
1.调用函数多次
我们可以根据需要调用函数任意次。
例如,要再描述一个宠物,只需再次调用describe_pet()即可:
describe_pet('dog','willie')
输出:
I have a dog.
My dog's name is Willie.
2.位置实参的顺序很重要
使用位置实参来调用函数时,如果实参的顺序不正确,结果可能出乎意料。
例如,下面的代码:
def describe_pet(animal_type, pet_name):
"""显示宠物的信息"""
print("\nI have a "+animal_type+".")
print("My "+animal_type+"'s name is "+pet_name.title()+".")
describe_pet('harry','hamster')
这里我们把动物类型和名字调换了一下位置,看看输出后的内容吧:
I have a harry.
My harry's name is Hamster.
是不是很奇怪?所以为了避免像上面一样搞笑,请确认函数调用中实参的顺序与函数定义中形参的顺序一致。
2.13.2.2 关键字实参
关键字实参是传递给函数的名称—值对。如果把实参中的名称和值关联起来了,向函数传递实参时就不会混淆了。关键字实参让你无需考虑函数调用中的实参顺序,还清楚地指出了函数调用中各个值的用途。
下面来重新编写上面的程序,在其中使用关键字实参来调用describe_pet():
def describe_pet(animal_type, pet_name):
"""显示宠物的信息"""
print