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