文章目录
到目前为止,我们已经学习了基本的数据类型、集合类型以及控制程序流程的条件语句和循环。随着程序越来越复杂,我们可能会发现自己反复编写相同的代码块来执行特定任务。这不仅低效,还会导致代码难以阅读和维护。
函数就是解决这个问题的重要工具。它们允许我们将一段代码封装起来,赋予一个名字,然后在需要的时候多次调用。本篇博客将深入讲解如何定义自己的函数、如何调用它们,以及如何使用 return
语句从函数中获取结果。
为什么要使用函数?
使用函数的好处多多:
- 代码重用 (Reusability): 避免重复编写相同的代码块。遵循 DRY (Don’t Repeat Yourself) 原则。
- 模块化 (Modularity): 将程序分解成更小、更易于管理和理解的部分。每个函数负责一个特定的任务。
- 提高可读性 (Readability): 通过有意义的函数名,代码变得更容易理解其目的。
- 易于维护和调试 (Maintainability & Debugging): 当需要修改或修复某个功能的代码时,只需在一个地方(函数定义处)进行修改。如果出现错误,更容易定位问题在哪个函数中。
函数的定义 (def
)
在 Python 中,使用 def
关键字来定义一个函数。定义函数的基本结构如下:
def function_name(parameter1, parameter2, ...):
"""
这里是函数的文档字符串 (Docstring)。
解释函数的功能、参数和返回值。
"""
# 函数体 - 执行任务的代码块
# ...
# return value # 可选的返回值
def
关键字: 标记着一个函数的定义开始。function_name
: 函数的名字。需要遵循 Python 的命名规则(通常使用小写字母和下划线_
组合,称为 snake_case)。函数名应该能够清晰地表明函数的功能。- 圆括号
()
: 紧跟在函数名后面。里面可以包含参数 (Parameters),用于接收外部传递进来的数据。如果没有参数,圆括号也不能省略。 - 冒号
:
: 标记着函数头部的结束,函数体即将开始。 - 文档字符串 (Docstring): 使用三引号
""" """
或''' '''
包围起来的一段文本。它应该在函数头部的下一行,用于详细说明函数的作用。这是 Python 的一个重要特性,可以通过help(function_name)
或function_name.__doc__
查看。编写良好的文档字符串是好习惯。 - 函数体: 缩进的代码块,包含了函数执行的实际操作。
return
语句: 用于指定函数执行完毕后返回给调用者的值。是可选的。
示例: 定义一个简单的函数,它不接受参数,也不返回值,只打印一条消息。
def greet():
"""这是一个简单的打招呼函数。"""
print("Hello, welcome to Python functions!")
print("This function does not take arguments and does not return a value.")
上面的代码只是定义了一个函数,它还没有被执行。
函数的调用
定义函数后,要让它执行里面的代码,就需要调用它。调用函数非常简单,只需要使用函数名后面加上圆括号 ()
即可。如果函数定义时有参数,调用时需要在圆括号中提供相应的实参 (Arguments)。
# 调用上面定义的 greet 函数
greet()
greet() # 函数可以被多次调用
输出:
Hello, welcome to Python functions!
This function does not take arguments and does not return a value.
Hello, welcome to Python functions!
This function does not take arguments and does not return a value.
函数参数 (Parameters vs Arguments)
- 参数 (Parameters): 在函数定义时,圆括号中列出的变量名。它们是函数内部使用的占位符,代表函数期望接收的数据。
- 实参 (Arguments): 在函数调用时,传递给函数参数的实际值。
# 定义一个接受一个参数的函数
def greet_person(name):
"""向指定名字的人打招呼。
Args:
name: 要打招呼的人的名字 (字符串)。
"""
print(f"Hello, {
name}!")
# 调用函数,并传递实参
greet_person("Alice") # "Alice" 是传递给 name 参数的实参
greet_person("Bob") # "Bob" 是传递给 name 参数的实参
输出:
Hello, Alice!
Hello, Bob!
一个函数可以有多个参数,调用时需要按照参数定义的顺序传递实参。
# 定义一个接受两个参数的函数
def add_numbers(a, b):
"""计算两个数字的和。
Args:
a: 第一个数字。
b: 第二个数字。
"""
sum_result = a + b
print(f"{
a