Python返回值案例如何返回数据

wen python案例 22

本文目录导读:

Python返回值案例如何返回数据

  1. 单一返回值
  2. 多个返回值(元组)
  3. 返回列表或其他容器
  4. 返回字典
  5. 条件返回值
  6. 返回自定义对象
  7. 返回函数(高阶函数)
  8. 生成器返回
  9. 返回类型注解(Python 3.5+)
  10. 最佳实践案例

我来详细介绍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类
  • 惰性计算: 使用生成器

最佳实践

  1. 保持一致性: 同一个函数返回类型要一致
  2. 明确文档: 使用docstring说明返回类型
  3. 错误处理: 显式处理异常情况
  4. 类型注解: 使用type hints提高代码可读性
  5. 避免None: 优先考虑抛出异常或使用Optional类型

这样设计返回值可以让代码更清晰、更易维护!

抱歉,评论功能暂时关闭!