本文目录导读:

我来详细介绍Python函数返回值的各种案例和最佳实践。
单一返回值
返回基本类型
def add(a, b):
return a + b
result = add(3, 5)
print(result) # 输出: 8
返回布尔值
def is_even(num):
return num % 2 == 0
print(is_even(4)) # True
print(is_even(7)) # False
多个返回值(元组)
基本多值返回
def get_user_info():
name = "张三"
age = 25
email = "zhangsan@example.com"
return name, age, email
# 解包接收
name, age, email = get_user_info()
print(f"姓名: {name}, 年龄: {age}, 邮箱: {email}")
# 也可以用单个变量接收元组
result = get_user_info()
print(result) # ('张三', 25, 'zhangsan@example.com')
print(result[0]) # 张三
返回列表或其他容器
def get_even_numbers(limit):
even_list = []
for i in range(limit):
if i % 2 == 0:
even_list.append(i)
return even_list
numbers = get_even_numbers(10)
print(numbers) # [0, 2, 4, 6, 8]
# 列表推导式版本
def get_even_numbers_v2(limit):
return [i for i in range(limit) if i % 2 == 0]
返回字典
def create_student(name, scores):
return {
'name': name,
'scores': scores,
'average': sum(scores) / len(scores) if scores else 0
}
student = create_student("小明", [85, 92, 78, 90])
print(student)
# {'name': '小明', 'scores': [85, 92, 78, 90], 'average': 86.25}
条件返回值
def divide(a, b):
if b == 0:
return None # 或 raise ValueError("除数不能为零")
return a / b
result = divide(10, 2)
print(result) # 5.0
result = divide(10, 0)
print(result) # None
返回自定义对象
class Result:
def __init__(self, success, data=None, error=None):
self.success = success
self.data = data
self.error = error
def process_data(value):
try:
# 模拟数据处理
result = value * 2
return Result(True, data=result)
except Exception as e:
return Result(False, error=str(e))
# 使用示例
res = process_data(5)
if res.success:
print(f"处理结果: {res.data}")
else:
print(f"错误: {res.error}")
返回函数(高阶函数)
def multiplier(factor):
def multiply_by_factor(number):
return number * factor
return multiply_by_factor
# 使用示例
double = multiplier(2)
triple = multiplier(3)
print(double(5)) # 10
print(triple(5)) # 15
生成器返回
def fibonacci_generator(limit):
a, b = 0, 1
count = 0
while count < limit:
yield a
a, b = b, a + b
count += 1
# 使用生成器
for num in fibonacci_generator(10):
print(num, end=" ") # 0 1 1 2 3 5 8 13 21 34
返回类型注解(Python 3.5+)
from typing import List, Dict, Tuple, Optional, Union
def get_stats(numbers: List[float]) -> Dict[str, float]:
return {
'mean': sum(numbers) / len(numbers),
'max': max(numbers),
'min': min(numbers)
}
def find_user(user_id: int) -> Optional[Dict[str, str]]:
# 可能返回 None 或字典
users = {1: {"name": "Alice"}, 2: {"name": "Bob"}}
return users.get(user_id)
def process_value(value: Union[int, str]) -> str:
if isinstance(value, int):
return f"Number: {value}"
return f"String: {value}"
最佳实践案例
完整的数据处理函数
from typing import List, Dict, Optional, Tuple
class ProcessResult:
"""处理结果封装类"""
def __init__(self, success: bool, data=None, error: Optional[str] = None):
self.success = success
self.data = data
self.error = error
def process_student_scores(scores: List[int]) -> ProcessResult:
"""
处理学生成绩
返回包含处理状态和结果的包装对象
"""
# 输入验证
if not scores:
return ProcessResult(False, error="成绩列表不能为空")
if any(score < 0 for score in scores):
return ProcessResult(False, error="成绩不能为负数")
# 计算统计数据
try:
stats = {
'total': sum(scores),
'average': sum(scores) / len(scores),
'max': max(scores),
'min': min(scores),
'count': len(scores)
}
# 计算等级
if stats['average'] >= 90:
grade = 'A'
elif stats['average'] >= 80:
grade = 'B'
else:
grade = 'C'
stats['grade'] = grade
return ProcessResult(True, data=stats)
except Exception as e:
return ProcessResult(False, error=str(e))
# 使用示例
def main():
scores = [85, 92, 78, 90, 88]
result = process_student_scores(scores)
if result.success:
print(f"处理成功:")
print(f" 总分: {result.data['total']}")
print(f" 平均分: {result.data['average']:.2f}")
print(f" 等级: {result.data['grade']}")
else:
print(f"处理失败: {result.error}")
if __name__ == "__main__":
main()
返回值选择指南
- 单一值: 使用直接返回
- 多个相关值: 使用元组或自定义类
- 不确定数量: 使用列表
- 键值对: 使用字典
- 状态+数据: 使用自定义Result类
- 惰性计算: 使用生成器
最佳实践
- 保持一致性: 同一个函数返回类型要一致
- 明确文档: 使用docstring说明返回类型
- 错误处理: 显式处理异常情况
- 类型注解: 使用type hints提高代码可读性
- 避免None: 优先考虑抛出异常或使用Optional类型
这样设计返回值可以让代码更清晰、更易维护!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播