第31集:函数定义与调用
学习目标
- 理解什么是函数
- 掌握函数的定义语法
- 学会调用函数
- 理解函数的作用和优势
一、什么是函数?
函数是一段可重复使用的代码块,用于完成特定的功能。使用函数可以:
- 避免代码重复:相同的功能只需写一次
- 提高代码可读性:给代码块起个有意义的名字
- 便于维护:修改函数定义,所有调用处都会生效
- 模块化编程:将复杂问题分解为小任务
生活类比
- 函数就像菜谱:按步骤执行,做一道菜
- 调用函数就像使用菜谱做饭
- 参数就是食材
- 返回值就是做好的菜
二、函数定义的语法
基本语法结构
def 函数名(参数列表):
"""文档字符串:函数的说明"""
# 函数体
# 代码块
return 返回值语法说明
| 元素 | 说明 |
|---|---|
def |
定义函数的关键字(define的缩写) |
函数名 |
函数的标识符,遵循变量命名规则 |
() |
圆括号,包含参数(可以为空) |
: |
冒号,表示函数定义的开始 |
| 缩进 | 函数体必须缩进(通常4个空格) |
return |
返回语句,可省略 |
三、定义第一个函数
示例1:无参无返回值的函数
# 定义一个简单的问候函数
def say_hello():
"""打印一句问候语"""
print("你好,欢迎学习Python!")
# 调用函数
say_hello() # 输出:你好,欢迎学习Python!示例2:有参数的函数
# 定义带参数的函数
def greet(name):
"""向指定的人问好"""
print(f"你好,{name}!")
# 调用函数
greet("小明") # 输出:你好,小明!
greet("小红") # 输出:你好,小红!示例3:有返回值的函数
# 定义有返回值的函数
def add(a, b):
"""计算两个数的和"""
return a + b
# 调用函数并接收返回值
result = add(3, 5)
print(result) # 输出:8四、函数的完整示例
示例4:计算矩形面积
def calculate_area(width, height):
"""
计算矩形的面积
参数:
width (float): 矩形的宽度
height (float): 矩形的高度
返回:
float: 矩形的面积
"""
area = width * height
return area
# 调用函数
area1 = calculate_area(5, 3)
print(f"矩形面积:{area1}")
area2 = calculate_area(10, 8)
print(f"矩形面积:{area2}")示例5:判断数字的正负
def check_number(num):
"""判断数字是正数、负数还是零"""
if num > 0:
return "正数"
elif num < 0:
return "负数"
else:
return "零"
# 测试函数
print(check_number(10)) # 输出:正数
print(check_number(-5)) # 输出:负数
print(check_number(0)) # 输出:零五、函数调用的规则
1. 必须先定义后调用
# ❌ 错误示例:先调用后定义
say_hi() # 报错:函数未定义
def say_hi():
print("Hi!")# ✅ 正确示例:先定义后调用
def say_hi():
print("Hi!")
say_hi() # 正常执行2. 调用时参数数量要匹配
def add(a, b):
return a + b
# ✅ 正确调用
result = add(3, 5)
# ❌ 错误调用
add(3) # 报错:缺少参数
add(3, 5, 7) # 报错:参数过多3. 函数名区分大小写
def SayHello():
print("Hello")
def sayhello():
print("hi")
SayHello() # 调用第一个函数
sayhello() # 调用第二个函数六、函数的文档字符串(Docstring)
什么是文档字符串
文档字符串是函数第一个未赋值的字符串,用于说明函数的功能。
def calculate_circle_area(radius):
"""
计算圆的面积
这个函数接收圆的半径作为参数,
返回圆的面积。使用公式:πr²
参数:
radius (float): 圆的半径,必须为正数
返回:
float: 圆的面积
示例:
>>> calculate_circle_area(5)
78.53981633974483
"""
import math
return math.pi * radius ** 2查看文档字符串
print(calculate_circle_area.__doc__)七、实际应用案例
案例1:温度转换器
def celsius_to_fahrenheit(celsius):
"""将摄氏度转换为华氏度"""
return celsius * 9/5 + 32
def fahrenheit_to_celsius(fahrenheit):
"""将华氏度转换为摄氏度"""
return (fahrenheit - 32) * 5/9
# 使用温度转换函数
c_temp = 25
f_temp = celsius_to_fahrenheit(c_temp)
print(f"{c_temp}°C = {f_temp}°F")
f_temp = 77
c_temp = fahrenheit_to_celsius(f_temp)
print(f"{f_temp}°F = {c_temp}°C")案例2:计算器函数
def calculator(num1, num2, operation):
"""
简单计算器
参数:
num1: 第一个数
num2: 第二个数
operation: 运算符(+、-、*、/)
返回:
计算结果
"""
if operation == '+':
return num1 + num2
elif operation == '-':
return num1 - num2
elif operation == '*':
return num1 * num2
elif operation == '/':
if num2 != 0:
return num1 / num2
else:
return "错误:除数不能为零"
else:
return "错误:不支持的运算符"
# 测试计算器
print(calculator(10, 5, '+')) # 输出:15
print(calculator(10, 5, '-')) # 输出:5
print(calculator(10, 5, '*')) # 输出:50
print(calculator(10, 5, '/')) # 输出:2.0八、常见错误与注意事项
错误1:忘记冒号
# ❌ 错误
def say_hello() # 缺少冒号
print("Hello")错误2:函数体没有缩进
# ❌ 错误
def say_hello():
print("Hello") # 没有缩进错误3:函数名使用了关键字
# ❌ 错误
def def():
print("Hello") # def是关键字,不能作函数名正确的函数命名
- 使用小写字母和下划线
- 描述性强,能表达函数的功能
- 动词开头(如:get、set、calculate、check等)
# ✅ 好的函数名
def get_user_info():
pass
def calculate_average():
pass
def is_valid():
pass九、小结
| 知识点 | 说明 |
|---|---|
| 函数定义 | 使用def关键字 |
| 函数调用 | 使用函数名加括号 |
| 参数 | 函数的输入 |
| 返回值 | 函数的输出 |
| 文档字符串 | 说明函数功能 |
| 缩进 | 函数体必须缩进 |
十、课后练习
练习1
定义一个函数max_of_two(a, b),返回两个数中的较大值。
练习2
定义一个函数is_even(n),判断一个数是否是偶数,返回True或False。
练习3
定义一个函数calculate_bmi(height, weight),计算BMI指数。
- BMI = 体重 / 身高²
练习4
定义一个函数grade_to_level(score),将分数转换为等级:
- 90-100:优秀
- 80-89:良好
- 70-79:中等
- 60-69:及格
- 0-59:不及格
练习5
定义一个函数print_multiplication_table(n),打印n的乘法表。