Python迭代器和生成器
迭代器和生成器在Python中的引入是为了提供一种更灵活、高效地处理数据集合的方式。
·
Python迭代器和生成器
迭代器和生成器在Python中的引入是为了提供一种更灵活、高效地处理数据集合的方式。
为什么要用迭代器和生成器
- 内存效率:迭代器和生成器允许按需生成和处理数据,只有在需要的时候会把相应的数据加载到内存,而不需要一次性将整个数据集加载到内存中。
- 支持无限序列:因为生成器只在需要时生成下一个值,而不是一次性生成整个序列。所以可以支持无限序列
- 延迟计算:只有在需要时才会计算下一个值,而不是一次性计算所有值。
迭代器(Iterator)
-
概念: 迭代器是一个实现了
__iter__()
和__next__()
方法的对象。__iter__()
返回迭代器对象本身,而__next__()
返回下一个值。当没有更多元素时,__next__()
应该引发StopIteration
异常。 -
使用:
>>> s = 'abc' >>> it = iter(s) # 返回s本身的迭代器 >>> it <str_iterator object at 0x10c90e650> >>> next(it) # 返回下一个值 'a' >>> next(it) 'b' >>> next(it) 'c' >>> next(it) #元素用尽引发异常 Traceback (most recent call last): File "<stdin>", line 1, in <module> next(it) StopIteration
-
示例:自定义一个简单的迭代器:
class MyIterator: def __init__(self, start, end): self.current = start self.end = end def __iter__(self): return self def __next__(self): # 可在这里定义序列生成的规则 if self.current < self.end: result = self.current self.current += 1 return result else: raise StopIteration my_iter = MyIterator(1, 5) # 在这里直接返回迭代器对象,不会立即生成整个序列 for value in my_iter: # 这里每次循环调用一次next,每一次调用计算一次序列的值 print(value)
生成器(Generator)
-
概念:生成器是一种特殊类型的迭代器,使用函数和
yield
语句来生成值。生成器会记住每次调用yield
的状态,使得在下一次调用时可以继续执行。yield
在生成器迭代时的作用类似于__next__
,然而其额外功能是生成器状态保存: 每次调用yield
语句时,生成器函数的状态(包括局部变量值)都会被保存。下一次迭代时,生成器将从上次保存的状态继续执行。 -
使用: 定义一个生成器函数,其中包含
yield
语句。生成器函数在调用时返回一个生成器对象。def my_generator(start, end): while start < end: yield start start += 1 # 生成器函数在调用时不会立即执行,而是返回一个生成器对象,该对象包含生成器函数的代码和状态。 gen = my_generator(1, 5) # 每次循环都会调用生成器函数,调用时生成器函数会将此时start、end的值保存下来。 for value in gen: print(value)
-
示例:使用生成器实现斐波那契数列:
def fibonacci_generator(n): a, b = 0, 1 count = 0 while count < n: # 生成器函数执行到 yield 语句时会暂停,并将当前状态保存,包括局部变量 a、b 和 count 的值。 yield a a, b = b, a + b count += 1 for value in fibonacci_generator(5): print(value)
迭代器和生成器的区别
- 定义方式:迭代器是实现了
__iter__()
和__next__()
方法的对象。 生成器是使用函数和yield
语句定义的。一个是对象一个是函数。 - 工作原理: 迭代器需要显式地维护状态,状态的管理通常涉及使用类属性或实例属性。 生成器通过 yield 语句来生成值,并在每次调用
yield
时保存状态。

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)