什么是函数?
在编程中,函数 是一个组织好的、可重复使用的、用来实现单一或相关联功能的代码块。

你可以把函数想象成一个“工具箱里的工具”,有一个叫 add_numbers 的函数,它的功能就是“把两个数字加起来”,当你需要计算两个数的和时,你不需要每次都写一遍加法代码,只需要调用这个“工具”(函数)就行了。
函数调用的基本语法
要使用一个函数,你需要调用它,函数调用的基本语法如下:
function_name(argument1, argument2, ...)
function_name: 你要调用的函数的名称。- 圆括号是必须的,它告诉 Python 你正在调用一个函数。
argument1,argument2, ...: 这些是参数,也就是你传递给函数的输入值,函数会使用这些值来执行它的任务,参数是可选的,有些函数不需要任何参数。
函数调用的步骤
函数调用分为两步:
- 定义函数: 你需要创建这个函数,使用
def关键字。 - 调用函数: 在代码的其他地方,通过函数名来执行它。
示例 1: 无参数、无返回值的函数
这种函数执行一个操作,但不返回任何值,也不接收任何输入。

# 步骤 1: 定义函数
def say_hello():
"""打印 'Hello, World!' 到控制台"""
print("Hello, World!")
# 步骤 2: 调用函数
# 直接写下函数名和一对括号
say_hello()
输出:
Hello, World!
注意: 如果你只写下 say_hello 而不带括号,你得到的是函数这个“对象”本身,而不是执行它。
print(say_hello) # 输出: <function say_hello at 0x...>
示例 2: 带参数、无返回值的函数
函数可以接收输入(参数),并根据这些输入执行操作。
# 步骤 1: 定义函数
def greet(name):
"""向指定的人问好"""
print(f"你好, {name}! 欢迎来到 Python。")
# 步骤 2: 调用函数,并传入参数 "Alice"
greet("Alice")
# 调用函数,并传入参数 "Bob"
greet("Bob")
输出:

你好, Alice! 欢迎来到 Python。
你好, Bob! 欢迎来到 Python。
示例 3: 带参数、有返回值的函数
这是最常见的函数类型,函数执行计算后,通过 return 语句将结果返回给调用者。
# 步骤 1: 定义函数
def add(a, b):
"""计算两个数的和并返回结果"""
result = a + b
return result
# 步骤 2: 调用函数,并用一个变量来接收返回值
sum_result = add(5, 3)
# 现在可以使用这个结果
print(f"5 + 3 的结果是: {sum_result}")
# 你也可以直接在表达式中使用它
print(f"10 + 20 的结果是: {add(10, 20)}")
输出:
5 + 3 的结果是: 8
10 + 20 的结果是: 30
注意: 一旦函数执行到 return 语句,函数就会立即终止,后面的代码将不再执行。
def check_number(num):
if num > 10:
return "这个数大于 10"
print("这条语句不会被执行,num > 10")
return "这个数小于等于 10"
print(check_number(15))
输出:
这个数大于 10
函数参数的传递方式
Python 函数的参数传递非常灵活。
1 位置参数
这是最常见的方式,参数的顺序必须和定义时的顺序一致。
def describe_pet(animal_type, pet_name):
"""显示宠物信息"""
print(f"我有一只 {animal_type}。")
print(f"它的名字叫 {pet_name}。")
# 按顺序传递参数
describe_pet("狗", "旺财")
输出:
我有一只 狗。
它的名字叫 旺财。
2 关键字参数
使用参数名来传递参数,这样顺序就不重要了,代码可读性也更高。
def describe_pet(animal_type, pet_name):
"""显示宠物信息"""
print(f"我有一只 {animal_type}。")
print(f"它的名字叫 {pet_name}。")
# 使用关键字参数,顺序可以打乱
describe_pet(pet_name="咪咪", animal_type="猫")
输出:
我有一只 猫。
它的名字叫 咪咪。
3 默认参数
在定义函数时,可以给参数指定一个默认值,如果调用时没有提供该参数,就使用默认值。
def describe_pet(pet_name, animal_type="狗"):
"""显示宠物信息,animal_type 默认为 '狗'"""
print(f"我有一只 {animal_type}。")
print(f"它的名字叫 {pet_name}。")
# 只提供了 pet_name,animal_type 使用默认值
describe_pet("大黄")
# 提供了所有参数,覆盖了默认值
describe_pet("小黑", "猫")
输出:
我有一只 狗。
它的名字叫 大黄。
我有一只 猫。
它的名字叫 小黑。
重要规则: 在定义函数时,没有默认值的参数必须放在有默认值的参数前面,否则会报错。
4 可变数量的参数 (*args 和 **kwargs)
有时你不知道会传入多少个参数。
*args: 用于接收任意数量的位置参数,它会将这些参数打包成一个元组。**kwargs: 用于接收任意数量的关键字参数,它会将这些参数打包成一个字典。
# 使用 *args
def make_pizza(*toppings):
"""打印顾客点的所有配料"""
print("\n制作一个披萨,配料如下:")
for topping in toppings:
print(f"- {topping}")
make_pizza("意大利辣香肠")
make_pizza("蘑菇", "青椒", "洋葱")
# 使用 **kwargs
def build_profile(first, last, **user_info):
"""创建一个字典,其中包含我们知道的有关用户的一切"""
user_info['first_name'] = first
user_info['last_name'] = last
return user_info
user_profile = build_profile('albert', 'einstein',
location='princeton',
field='physics')
print(user_profile)
输出:
制作一个披萨,配料如下:
- 意大利辣香肠
制作一个披萨,配料如下:
- 蘑菇
- 青椒
- 洋葱
{'location': 'princeton', 'field': 'physics', 'first_name': 'albert', 'last_name': 'einstein'}
函数作为参数传递
在 Python 中,函数是“一等公民”,意味着函数可以被当作变量一样传递给其他函数。
def add(a, b):
return a + b
def subtract(a, b):
return a - b
def calculate(func, x, y):
"""接受一个函数和两个数字,并调用该函数"""
print(f"计算结果: {func(x, y)}")
# 将 add 函数作为参数传递给 calculate
calculate(add, 5, 3) # 输出: 计算结果: 8
# 将 subtract 函数作为参数传递给 calculate
calculate(subtract, 5, 3) # 输出: 计算结果: 2
嵌套函数调用
一个函数的返回结果可以作为另一个函数的参数。
def add(a, b):
return a + b
def multiply(a, b):
return a * b
# 先计算 5 + 3,然后将结果 (8) 和 4 一起传递给 multiply 函数
result = multiply(add(5, 3), 4)
print(f"最终结果是: {result}") # 输出: 最终结果是: 32
| 概念 | 语法/示例 | 描述 |
|---|---|---|
| 基本调用 | my_function() |
执行函数 my_function 的代码。 |
| 带参数调用 | my_function(arg1, arg2) |
向函数传递数据(参数)。 |
| 接收返回值 | result = my_function() |
将函数通过 return 返回的值存储在变量中。 |
| 位置参数 | my_func('a', 'b') |
按定义顺序传递参数。 |
| 关键字参数 | my_func(arg2='b', arg1='a') |
按参数名传递参数,顺序可变。 |
| 默认参数 | def my_func(a, b=10): |
定义时给参数默认值,调用时可省略。 |
| 可变参数 | def my_func(*args, **kwargs): |
接收任意数量的位置参数(元组)和关键字参数(字典)。 |
| 函数作为参数 | calculate(add, 5, 3) |
将一个函数对象传递给另一个函数。 |
掌握函数调用是学习 Python 的基石,多写、多练,你很快就能熟练运用它来写出结构清晰、可重用的代码。
