如果您用 Python 编写过任何代码,那么您已经使用过函数。 Print()、max() 和 sum() 都是内置的 Python 函数。但是,您知道您也可以定义自己的函数吗?让我们来看看如何在 Python 中定义和调用函数。
Python 中的函数是什么?
在编程中, 函数 是执行某项特定任务或一组相关任务的代码块。
如果你发现自己经常重复使用相同的代码块,可以考虑编写一个相应的函数。这样,下次需要这段代码时,只需调用该函数即可。
用户定义函数带来几个重要的好处:
- 当您需要定期完成相同的任务时,函数非常方便。定义函数后,您只需调用它,而不必一遍又一遍地输入或复制粘贴相同的代码片段。此外,如果您决定更改代码块,则只需在定义函数的地方进行更改即可。此更改将应用于调用函数的任何地方。
- 通过定义和使用函数,您可以将复杂的程序分解为较小的步骤。每个步骤都可以是解决特定任务的单独函数。
- 最后,使用用户定义函数,您的代码通常更容易理解。您可以清楚地看到每个代码块完成的任务。当函数按照后面讨论的最佳实践定义时,尤其如此。
是不是兴奋了呢?好,我们一起来定义几个函数吧。
在 Python 中定义函数:语法和示例
Python 中定义函数的语法如下:
def function_name(arguments):
block of code
以下是语法描述:
-
我们以
def
关键字开始,告知 Python 一个新函数正在被定义。 - 然后,我们给函数起一个 有意义的名字 .
- 接下来,我们在括号中列出 执行任务所需的 参数
- 冒号 “:” 表示函数头的结束和到函数体的转换。
- 缩进 之后 ,我们编写 执行手头任务所需的 代码块
- 完成代码块后,我们留下一个空行来标记函数定义的结束。
现在您已经了解了语法,我建议您练习一下函数定义技能。练习的最佳方法是使用我们的 Python 基础知识。第 1 部分 课程。
具有一个参数的函数
让我们从一个简单的函数开始,该函数以名称作为输入并打印出一行介绍。以下是如何定义此函数:
def introduction(name):
"""Introduces a person given their name"""
print('Hello! My name is', name)
这个函数名为 introduction ,有一个参数 name 。这个函数的主体只有一行,打印出消息,包括name。我们还添加了一条注释来解释这个函数的用途。
现在,我们调用它并检查输出:
introduction(âKaterynaâ)
输出
Hello! My name is Kateryna
我们只需将名称传递给我们的函数(请注意引号,因为名称是一个字符串)并获取介绍消息作为输出。
即使是一个只有一行代码的小函数,如果经常使用,也可以节省我们的时间。所以,想象一下更长的代码块会带来哪些好处!
无参数的函数
在某些情况下,你可能希望定义不带任何参数的函数。例如,让我们编写一个函数来打印有关密码错误的错误消息:
def error_message_password():
"""Prints out an error message about the incorrect password"""
print('Sorry. We couldnât log you in. The password you entered didnât match our records.')
此函数不需要任何参数。因此,我们定义它,并将括号留空。调用此函数时,只需写下其名称,后跟空括号:
error_message_password()
输出
Sorry. We couldnât log you in. The password you entered didnât match our records.
具有多个参数的函数
现在让我们定义一个具有多个参数的更复杂的函数。这次,我们要创建一个函数,该函数将根据一个人的出生日期(出生年份、出生月份和出生日期)计算其年龄。该函数如下:
from datetime import date
def get_age(birth_year, birth_month, birth_day):
"""Calculates age (in years) based on birth year, birth month, and birth day."""
birth_date = date(birth_year, birth_month, birth_day)
age = date.today() - birth_date
age_years = age.days / 365.2425
return age_years
我们首先导入模块的日期类,
datetime
以便轻松处理日期。您可以通过我们的
Python 基础知识第 3 部分
课程
现在,我们准备定义
get_age
函数。请注意,此函数需要三个参数:
birth_year
,
birth_month
,
birth_day
。在函数主体中
get_age
根据提供的信息
birth_date
定义
然后,我们用今天的日期减去出生日期,计算出年龄(天数)。最后,我们用年龄(天数)除以
365.2425
一年的平均天数,计算出年龄(岁数)。
注意
函数定义末尾的
return 语句
print()
允许我们查看每个函数输出的函数。但在大多数情况下,您只需要函数返回
某个值
,而不一定将其打印出来。
这时 return 语句就派上用场了。使用 return 关键字指定返回值,该值可以是任何 Python 对象(例如,整数、字符串、列表、元组、字典、集合等)。
现在,让我们
get_age()
使用多个参数调用我们的函数。关于传递参数,我们有两种选择:
-
位置参数。
这涉及按照与函数定义中的参数对应的顺序传递参数:
get_age(1987, 9, 2)
p24
33.57221571969308
- 关键字参数。 这涉及以任意顺序传递参数并按名称指定每个参数:
get_age(birth_day=2, birth_month=9, birth_year=1987)
输出
33.57221571969308
使用关键字参数,您不需要注意参数顺序,但需要输入所有参数的确切名称。
另外,请注意,无论选择哪个选项,参数的数量都必须与函数定义中的参数数量相匹配。
在上面的输出中,您可以看到该
get_age()
函数按照 return 语句的要求返回年龄(以年为单位)。但是,我们可能不只是输出这个值,而是希望将其分配给一个变量。请参见下文:
kate_age = get_age(1987, 9, 2)
print(kate_age)
输出
33.57221571969308
现在,
kate_age
变量保存了函数返回的值
get_age()
。
返回 None 的函数
所有 Python 函数都会返回某个值。如果你没有明确使用 return 语句,Python 将提供一个 隐式 return 语句,并以 None 作为返回值 .
在某些情况下,你可能希望函数执行某些操作而不返回任何值。我们可以在前两个例子中看到这一点。我们打印出函数的结果而不显式返回任何值。
现在,我们将函数的结果分配
error_message_password()
给一个变量并检查该变量的值:
error = error_message_password()
print(error)
输出
None
如您所见,error 变量存储的是 None 值,而不是您可能期望的错误消息。这是因为在我们的
error_message_password()
函数中,我们只打印出错误消息,而没有明确返回其值。
,如果你希望函数返回 ,请注意并始终 None .
使用 Python 编写函数的最佳实践
我想通过列出一些在 Python 中定义函数的有用做法来结束本指南:
- 使用有意义的函数名。 你的函数应该有有意义的名称,以反映它们被分配要完成的任务。这不仅可以提高代码的可读性,对于使用你的代码的其他程序员来说也是如此,当你过一段时间再回来看你的代码时,你也会更容易阅读。此外,一定要遵循 Python 函数名的约定:只使用小写字母,用下划线分隔单词。
- 将一项任务分配给一个函数。 理想情况下,一个函数应该负责一项任务。这可以支持清晰的代码结构并提高可读性。
- 为函数 task 提供注释 。确保在标题下方包含函数功能的简短摘要。此注释称为文档字符串,应使用三重双引号(“””)括起来。
遵循这些做法,您的代码就会看起来干净、专业。
练习时间到了!
恭喜,您现在知道如何在 Python 中定义和调用函数了!现在是时候通过真正的代码挑战来巩固这些知识了。
我建议从 Python 基础知识第 1 部分 课程开始。它包括 95 个交互式练习,涵盖条件语句、“for”循环、“while”循环,当然还有 Python 中的用户定义函数。
如果 在 2021 年意识到 Python 的超能力 ,渴望了解更多,请查看整个 Python 基础 Python 基础概述文章 中了解有关此课程的更多信息 .
你正处于激动人心的 Python 旅程的开始阶段。为了让这段旅程更加精彩和有效,我想与你分享 开始学习 Python 的 9 个最佳在线资源 .
感谢阅读,祝您学习愉快!
发表评论 取消回复