本文目录导读:

我来从最基础开始,系统地介绍Python函数定义的相关案例。
最简单的函数定义
无参数无返回值
# 最基本的函数
def greet():
print("Hello, World!")
# 调用函数
greet() # 输出: Hello, World!
有参数无返回值
def greet_person(name):
print(f"Hello, {name}!")
greet_person("小明") # 输出: Hello, 小明!
有返回值的函数
计算并返回值
def add(a, b):
return a + b
result = add(3, 5)
print(result) # 输出: 8
# 也可以直接使用
print(add(10, 20)) # 输出: 30
多个返回值
def get_min_max(numbers):
return min(numbers), max(numbers)
min_val, max_val = get_min_max([3, 1, 7, 2, 9])
print(f"最小值: {min_val}, 最大值: {max_val}")
# 输出: 最小值: 1, 最大值: 9
参数类型详解
默认参数
def power(base, exp=2):
"""计算base的exp次方,默认计算平方"""
return base ** exp
print(power(5)) # 输出: 25 (5的平方)
print(power(5, 3)) # 输出: 125 (5的立方)
关键字参数
def introduce(name, age, city):
print(f"大家好,我是{name},今年{age}岁,来自{city}")
# 位置参数
introduce("张三", 25, "北京")
# 输出: 大家好,我是张三,今年25岁,来自北京
# 关键字参数(顺序可以不同)
introduce(city="上海", name="李四", age=30)
# 输出: 大家好,我是李四,今年30岁,来自上海
可变参数
# *args 可以接收任意数量的位置参数
def sum_all(*numbers):
total = 0
for num in numbers:
total += num
return total
print(sum_all(1, 2, 3, 4, 5)) # 输出: 15
print(sum_all(10, 20)) # 输出: 30
# **kwargs 可以接收任意数量的关键字参数
def print_info(**info):
for key, value in info.items():
print(f"{key}: {value}")
print_info(name="小明", age=18, grade="高一")
# 输出:
# name: 小明
# age: 18
# grade: 高一
实际应用案例
案例1:计算器函数
def calculator(num1, num2, operator):
"""基础计算器"""
if operator == "+":
return num1 + num2
elif operator == "-":
return num1 - num2
elif operator == "*":
return num1 * num2
elif operator == "/":
if num2 != 0:
return num1 / num2
else:
return "除数不能为0"
else:
return "不支持的运算符"
# 测试
print(calculator(10, 5, "+")) # 输出: 15
print(calculator(10, 5, "-")) # 输出: 5
print(calculator(10, 5, "*")) # 输出: 50
print(calculator(10, 5, "/")) # 输出: 2.0
案例2:用户验证函数
def login_check(username, password):
"""简单的登录验证"""
# 假设的用户数据库
users = {
"admin": "123456",
"user1": "abc123"
}
if username in users:
if users[username] == password:
return "登录成功"
else:
return "密码错误"
else:
return "用户名不存在"
# 测试
print(login_check("admin", "123456")) # 输出: 登录成功
print(login_check("admin", "123")) # 输出: 密码错误
print(login_check("guest", "123")) # 输出: 用户名不存在
案例3:数据处理函数
def process_student_scores(scores):
"""处理学生成绩,返回统计信息"""
if not scores:
return "没有成绩数据"
average = sum(scores) / len(scores)
highest = max(scores)
lowest = min(scores)
# 分级
if average >= 90:
grade = "优秀"
elif average >= 80:
grade = "良好"
elif average >= 70:
grade = "中等"
elif average >= 60:
grade = "及格"
else:
grade = "不及格"
return {
"平均分": average,
"最高分": highest,
"最低分": lowest,
"等级": grade
}
# 测试
scores = [85, 92, 78, 95, 88]
result = process_student_scores(scores)
print(result)
# 输出: {'平均分': 87.6, '最高分': 95, '最低分': 78, '等级': '良好'}
案例4:递归函数
def factorial(n):
"""计算阶乘(递归方式)"""
if n == 0 or n == 1:
return 1
else:
return n * factorial(n - 1)
def fibonacci(n):
"""计算斐波那契数列第n项"""
if n <= 0:
return 0
elif n == 1:
return 1
else:
return fibonacci(n-1) + fibonacci(n-2)
# 测试
print(factorial(5)) # 输出: 120 (5*4*3*2*1)
print(fibonacci(10)) # 输出: 55
函数文档字符串(Docstring)
def calculate_bmi(weight, height):
"""
计算BMI指数
Parameters:
weight (float): 体重(公斤)
height (float): 身高(米)
Returns:
float: BMI指数
str: 体重状态描述
"""
bmi = weight / (height ** 2)
if bmi < 18.5:
status = "偏瘦"
elif bmi < 24:
status = "正常"
elif bmi < 28:
status = "偏胖"
else:
status = "肥胖"
return bmi, status
# 查看函数文档
help(calculate_bmi)
# 使用函数
bmi, status = calculate_bmi(70, 1.75)
print(f"BMI: {bmi:.2f}, 状态: {status}")
# 输出: BMI: 22.86, 状态: 正常
函数高级特性
Lambda匿名函数
# 简单的lambda函数
square = lambda x: x ** 2
print(square(5)) # 输出: 25
# 在排序中使用
students = [
{"name": "张三", "score": 85},
{"name": "李四", "score": 92},
{"name": "王五", "score": 78}
]
# 按成绩排序
students.sort(key=lambda s: s["score"], reverse=True)
print(students)
# 输出: [{'name': '李四', 'score': 92}, {'name': '张三', 'score': 85}, {'name': '王五', 'score': 78}]
基础函数定义的步骤:
- 使用
def关键字 - 函数名(建议使用有意义的名称)
- 参数列表(可以为空)
- 函数体(缩进)
- 可选:返回值(使用
return)
建议从简单的例子开始练习,逐步掌握各种参数类型和函数特性。