当前位置:首页>python>Python生成器与迭代器实战:高效处理海量数据

Python生成器与迭代器实战:高效处理海量数据

  • 2026-10-11 07:16:14
Python生成器与迭代器实战:高效处理海量数据

迭代器的优势

迭代器是Python的核心概念,能提高数据处理效率。使用迭代器可以节省内存,适合处理大数据。

# 列表方式 - 一次性加载所有数据
numbers = [x for x in range(1000000)]

# 生成器方式 - 按需生成
numbers = (x for x in range(1000000))

迭代器基本概念

理解迭代器协议。

my_list = [1, 2, 3]
iterator = iter(my_list)

print(next(iterator))  # 1
print(next(iterator))  # 2
print(next(iterator))  # 3
# print(next(iterator))  # StopIteration

自定义迭代器

实现__iter__和__next__方法。

classMyIterator:
def__init__(self, start, end):
        self.current = start
        self.end = end

def__iter__(self):
return self

def__next__(self):
if self.current >= self.end:
raise StopIteration
        value = self.current
        self.current += 1
return value

for num in MyIterator(0, 5):
    print(num)

生成器函数

使用yield创建生成器。

deffibonacci(n):
    a, b = 0, 1
for _ in range(n):
yield a
        a, b = b, a + b

for num in fibonacci(10):
    print(num)

生成器表达式

简洁的生成器创建方式。

# 生成器表达式
squares = (x ** 2for x in range(10))

# 列表推导式对比
squares_list = [x ** 2for x in range(10)]

# 生成器节省内存
import sys
print(sys.getsizeof(squares))      # 约100字节
print(sys.getsizeof(squares_list)) # 约900字节

无限生成器

生成无限序列。

definfinite_counter():
    count = 0
whileTrue:
yield count
        count += 1

counter = infinite_counter()
for _ in range(5):
    print(next(counter))

迭代器链

多个迭代器可以组合使用。

defeven_numbers(n):
return (x for x in range(n) if x % 2 == 0)

defsquare_numbers(numbers):
return (x ** 2for x in numbers)

result = square_numbers(even_numbers(10))
for num in result:
    print(num)

实战案例:处理大型CSV文件

用生成器处理超大文件。

defread_large_file(filepath):
with open(filepath, 'r') as f:
for line in f:
yield line.strip().split(',')

deffilter_rows(rows, condition):
for row in rows:
if condition(row):
yield row

rows = read_large_file('large_data.csv')
filtered = filter_rows(rows, lambda r: float(r[2]) > 1000)

for row in filtered:
    print(row)

itertools模块实战

强大的迭代工具库。

import itertools

# 无限迭代器
counter = itertools.count(start=1, step=2)

# 循环迭代器
cycle = itertools.cycle(['A', 'B', 'C'])

# 重复迭代器
repeat = itertools.repeat(10, times=3)

# 组合迭代器
product = itertools.product([1, 2], ['a', 'b'])

总结

生成器和迭代器是Python处理大数据的实用工具,掌握它们能提高代码效率。

最新文章

随机文章