本文目录导读:

我来为你详细介绍Python迭代器的创建方法和案例。
基本迭代器创建方法
使用 iter() 函数
# 将可迭代对象转换为迭代器 my_list = [1, 2, 3, 4, 5] my_iter = iter(my_list) # 使用 next() 获取元素 print(next(my_iter)) # 1 print(next(my_iter)) # 2 print(next(my_iter)) # 3
使用 for 循环(自动处理迭代)
my_list = [1, 2, 3, 4, 5]
for item in my_list:
print(item) # 自动迭代每个元素
自定义迭代器类
基础自定义迭代器
class Counter:
"""简单的计数器迭代器"""
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
# 使用自定义迭代器
counter = Counter(1, 5)
for num in counter:
print(num) # 输出: 1, 2, 3, 4, 5
高级自定义迭代器 - 斐波那契数列
class FibonacciIterator:
"""斐波那契数列迭代器"""
def __init__(self, max_count):
self.max_count = max_count
self.count = 0
self.a, self.b = 0, 1
def __iter__(self):
return self
def __next__(self):
if self.count >= self.max_count:
raise StopIteration
# 返回当前值并计算下一个
if self.count == 0:
self.count += 1
return self.a
self.count += 1
self.a, self.b = self.b, self.a + self.b
return self.a
# 生成前10个斐波那契数
fib = FibonacciIterator(10)
for num in fib:
print(num, end=' ') # 输出: 0 1 1 2 3 5 8 13 21 34
使用生成器创建迭代器
生成器函数
def simple_generator():
"""简单生成器函数"""
yield 1
yield 2
yield 3
# 使用生成器
gen = simple_generator()
print(next(gen)) # 1
print(next(gen)) # 2
print(next(gen)) # 3
实用生成器案例
def fibonacci_generator(n):
"""生成斐波那契数列的生成器"""
a, b = 0, 1
count = 0
while count < n:
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
实际应用案例
读取大文件(内存友好)
class FileLineIterator:
"""逐行读取大文件的迭代器"""
def __init__(self, filename):
self.filename = filename
self.file = None
def __iter__(self):
self.file = open(self.filename, 'r', encoding='utf-8')
return self
def __next__(self):
line = self.file.readline()
if not line:
self.file.close()
raise StopIteration
return line.strip()
# 使用示例(假设有 big_file.txt)
# file_iter = FileLineIterator('big_file.txt')
# for line in file_iter:
# print(line)
分页数据迭代器
class PaginationIterator:
"""分页数据迭代器"""
def __init__(self, total_items, page_size=10):
self.total_items = total_items
self.page_size = page_size
self.current_page = 1
self.total_pages = (total_items + page_size - 1) // page_size
def __iter__(self):
return self
def __next__(self):
if self.current_page > self.total_pages:
raise StopIteration
start = (self.current_page - 1) * self.page_size + 1
end = min(self.current_page * self.page_size, self.total_items)
page_data = list(range(start, end + 1))
self.current_page += 1
return {
'page': self.current_page - 1,
'items': page_data
}
# 使用示例
pagination = PaginationIterator(25, 10)
for page in pagination:
print(f"Page {page['page']}: {page['items']}")
# 输出:
# Page 1: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# Page 2: [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
# Page 3: [21, 22, 23, 24, 25]
无限序列迭代器
class InfiniteCounter:
"""无限计数器(需谨慎使用)"""
def __init__(self, start=0):
self.current = start
def __iter__(self):
return self
def __next__(self):
value = self.current
self.current += 1
return value
# 使用 itertools 限制无限迭代
from itertools import islice
infinite = InfiniteCounter()
limited = islice(infinite, 10) # 只取前10个
for num in limited:
print(num, end=' ') # 0 1 2 3 4 5 6 7 8 9
迭代器 vs 可迭代对象
# 可迭代对象 my_list = [1, 2, 3] print(hasattr(my_list, '__iter__')) # True print(hasattr(my_list, '__next__')) # False # 迭代器 my_iter = iter(my_list) print(hasattr(my_iter, '__iter__')) # True print(hasattr(my_iter, '__next__')) # True
最佳实践建议
- 简单场景使用生成器:比创建完整类更简洁
- 复杂逻辑使用类:当需要维护复杂状态时
- 处理大文件使用迭代器:节省内存
- 注意无限迭代器:确保有退出条件
这些案例涵盖了Python迭代器的主要使用场景,你可以根据具体需求选择合适的方式。
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播