没有合适的资源?快使用搜索试试~ 我知道了~
在本章中, 你将学习编写函数 。 函数是带名字的代码块, 用于完成具体的工作。 要执行函数定义的特定任务, 可调用该函数。 需要在程序中多次执行同一项任务时, 你无需反复编写完成该任务的代码, 而只需调用执行该任务的函数, 让Python运行其中的代码。 你将发现, 通过使用函数, 程序的编写、 阅读、 测试和修复都将更容易。 在本章中, 你还会学习向函数传递信息的方式。 你将学习如何编写主要任务是显示信息的函数, 还有用于处理数据并返回一个或一组值的函数。 最后, 你将学习如何将函数存储在被称为模块的独立文件中, 让主程序文件的组织更为有序。
资源推荐
资源详情
资源评论
笔记本: Python
创建时间: 2024-01-18 10:31 更新时间: 2024-01-18 13:58
作者: 2568523998@qq.com
【Python】第八章_函数
在本章中, 你将学习编写函数 。 函数是带名字的代码块, 用于完成具体
的工作。
要执行函数定义的特定任务, 可调用该函数。 需要在程序中多次执行同
一项任务时, 你无需反复编写完成该任务的代码, 而只需调用执行该任务的函
数, 让Python运行其中的代码。 你将发现, 通过使用函数, 程序的编写、
阅读、 测试和修复都将更容易。
在本章中, 你还会学习向函数传递信息的方式。 你将学习如何编写主要
任务是显示信息的函数, 还有用于处理数据并返回一个或一组值的函数。 最
后, 你将学习如何将函数存储在被称为模块的独立文件中, 让主程序文件的组
织更为有序。
1 定义函数
下面是一个打印问候语的简单函数, 名为greet_user() :
greeter.py
❶ 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!
1.1 向函数传递信息
只需稍作修改, 就可以让函数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() 任意次, 调用时
无论传入什么样的名字, 都会生成相应的输出。
1.2 实参和形参
前面定义函数greet_user() 时, 要求给变量username 指定一个值。 调
用这个函数并提供这种信息(人名) 时, 它将打印相应的问候语。
在函数greet_user() 的定义中, 变量username 是一个形参 ——函数完
成其工作所需的一项信息。 在代码greet_user('jesse') 中, 值'jesse' 是一个实
参 。 实参是调用函数时传递给函数的信息。 我们调用函数时, 将要让函数使
用的信息放在括号内。 在greet_user('jesse') 中, 将实参'jesse' 传递给了函数
greet_user() , 这个值被存储在形参username 中。
2 传递实参
鉴于函数定义中可能包含多个形参, 因此函数调用中也可能包含多个实
参。 向函数传递实参的方式很多, 可使用位置实参 , 这要求实参的顺序与形
参的顺序相同; 也可使用关键字实参 , 其中每个实参都由变量名和值组成;
还可使用列表和字典。 下面来依次介绍这些方式。
2.1 位置实参
你调用函数时, Python必须将函数调用中的每个实参都关联到函数定义
中的一个形参。 为此, 最简单的关联方式是基于实参的顺序。 这种关联方式
被称为位置实参 。
为明白其中的工作原理, 来看一个显示宠物信息的函数。 这个函数指出
一个宠物属于哪种动物以及它叫什么名字, 如下所示:
pets.py
❶ 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')
这个函数的定义表明, 它需要一种动物类型和一个名字(见❶) 。 调用
describe_pet() 时, 需要按顺序提供一种动物类型和一个名字。 例如, 在前
面的函数调用中, 实参'hamster' 存储在形参animal_type 中, 而实参'harry'
存储在形参pet_name 中(见❷) 。 在函数体内, 使用了这两个形参来显示宠
物的信息。
输出描述了一只名为Harry的仓鼠:
I have a hamster.
My hamster's name is Harry.
1. 调用函数多次
你可以根据需要调用函数任意次。 要再描述一个宠物, 只需再次调用
describe_pet() 即可:
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')
describe_pet('dog', 'willie')
第二次调用describe_pet() 函数时, 我们向它传递了实参'dog' 和'willie'
。 与第一次调用时一样, Python将实参'dog' 关联到形参animal_type , 并
将实参'willie' 关联到形参pet_name 。 与前面一样, 这个函数完成其任务,
但打印的是一条名为Willie的小狗的信息。 至此, 我们有一只名为Harry的仓
鼠, 还有一条名为Willie的小狗:
I have a hamster.
My hamster's name is Harry.
I have a dog.
My dog's name is Willie.
调用函数多次是一种效率极高的工作方式。 我们只需在函数中编写描述宠
物的代码一次, 然后每当需要描述新宠物时, 都可调用这个函数, 并向它提
供新宠物的信息。 即便描述宠物的代码增加到了10行, 你依然只需使用一行调
用函数的代码, 就可描述一个新宠物。
在函数中, 可根据需要使用任意数量的位置实参, Python将按顺序将函
数调用中的实参关联到函数定义中相应的形参。
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')
在这个函数调用中, 我们先指定名字, 再指定动物类型。 由于实
参'harry' 在前, 这个值将存储到形参animal_type 中; 同理, 'hamster' 将
存储到形参pet_name 中。
结果是我们得到了一个名为Hamster 的harry :
I have a harry.
My harry's name is Hamster.
如果结果像上面一样搞笑, 请确认函数调用中实参的顺序与函数定义中形
参的顺序一致。
2.2 关键字实参
关键字实参是传递给函数的名称—值对。 你直接在实参中将名称和值关联
起来了, 因此向函数传递实参时不会混淆(不会得到名为Hamster的harry这样
的结果) 。 关键字实参让你无需考虑函数调用中的实参顺序, 还清楚地指出
了函数调用中各个值的用途。
下面来重新编写pets.py, 在其中使用关键字实参来调用describe_pet()
:
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(animal_type='hamster', pet_name='harry')
函数describe_pet() 还是原来那样, 但调用这个函数时, 我们向Python
明确地指出了各个实参对应的形参。 看到这个函数调用时, Python知道应该
将实参'hamster'和'harry' 分别存储在形参animal_type 和pet_name 中。 输
出正确无误, 它指出我们有一只名为Harry的仓鼠。
关键字实参的顺序无关紧要, 因为Python知道各个值该存储到哪个形参中。
下面两个函数调用是等效的:
describe_pet(animal_type='hamster', pet_name='harry')
describe_pet(pet_name='harry', animal_type='hamster')
注意 使用关键字实参时, 务必准确地指定函数定义中的形参名。
2.3 默认值
编写函数时, 可给每个形参指定默认值 。 在调用函数中给形参提供了实
参时, Python将使用指定的实参值; 否则, 将使用形参的默认值。 因此,
给形参指定默认值后, 可在函数调用中省略相应的实参。 使用默认值可简化函
数调用, 还可清楚地指出函数的典型用法。
例如, 如果你发现调用describe_pet() 时, 描述的大都是小狗, 就可将
形参animal_type 的默认值设置为'dog' 。 这样, 调用describe_pet() 来描述
小狗时, 就可不提供这种信息:
def describe_pet(pet_name, animal_type='dog'):
"""显示宠物的信息"""
print("\nI have a " + animal_type + ".")
print("My " + animal_type + "'s name is " + pet_name.title() + ".")
describe_pet(pet_name='willie')
这里修改了函数describe_pet() 的定义, 在其中给形参animal_type 指定
了默认值'dog' 。 这样, 调用这个函数时, 如果没有给animal_type 指定值,
Python将把这个形参设置为'dog' :
I have a dog.
My dog's name is Willie.
请注意, 在这个函数的定义中, 修改了形参的排列顺序。 由于给
animal_type 指定了默认值, 无需通过实参来指定动物类型, 因此在函数调用
中只包含一个实参——宠物的名字。 然而, Python依然将这个实参视为位置
实参, 因此如果函数调用中只包含宠物的名字, 这个实参将关联到函数定义中
的第一个形参。 这就是需要将pet_name 放在形参列表
开头的原因所在。
现在, 使用这个函数的最简单的方式是, 在函数调用中只提供小狗的名
字:
describe_pet('willie')
这个函数调用的输出与前一个示例相同。 只提供了一个实参——'willie'
, 这个实参将关联到函数定义中的第一个形参——pet_name 。 由于没有给
animal_type 提供实
参, 因此Python使用其默认值'dog' 。
如果要描述的动物不是小狗, 可使用类似于下面的函数调用:
describe_pet(pet_name='harry', animal_type='hamster')
剩余17页未读,继续阅读
资源评论
冷凝女子
- 粉丝: 499
- 资源: 67
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功