MST

星途 面试题库

面试题:Python循环性能优化之生成器与迭代器

给定一个非常大的文本文件,文件中每行是一个数字。现在要读取文件中所有数字,计算它们的平方和。请使用迭代器和生成器相关知识,设计一个高效的实现方式,并说明这样做如何优化了循环性能,避免潜在的内存问题。
47.5万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
def read_numbers(file_path):
    with open(file_path, 'r') as file:
        for line in file:
            yield int(line.strip())


def calculate_square_sum(file_path):
    numbers = read_numbers(file_path)
    square_sum = 0
    for num in numbers:
        square_sum += num ** 2
    return square_sum

优化说明

  1. 迭代器与生成器优化循环性能
    • 使用生成器函数 read_numbers 逐行读取文件内容并生成数字。生成器在迭代过程中按需生成值,而不是一次性将所有数字读入内存。这避免了在循环开始前一次性将整个文件的数字加载到内存,使得循环每次只需要处理一个数字,大大减少了内存占用。
    • calculate_square_sum 函数中,对生成器 numbers 进行迭代,每次迭代获取一个数字并计算其平方和,这种逐次处理的方式相比于将所有数字先收集到一个列表等容器中再计算平方和,减少了中间数据存储带来的开销,提升了循环性能。
  2. 避免潜在内存问题
    • 如果直接将文件中的所有数字读入一个列表,对于非常大的文本文件,可能会导致内存耗尽。而使用生成器和迭代器,内存中始终只需要存储当前正在处理的数字以及计算结果,而不需要存储整个数字集合,从而有效避免了因文件过大导致的内存问题。