Python中的迭代器与生成器使用及说明
什么是迭代器?
在 Python 中,迭代器是一个实现了 __iter__()
和 __next__()
方法的对象。__iter__()
返回迭代器对象本身,__next__()
返回迭代器中的下一个值。如果没有更多的值可供迭代,那么 __next__()
方法应该抛出 StopIteration
异常。
迭代器的使用
可以使用 iter()
函数创建一个迭代器对象,生成式也可以用于创建迭代器。
示例一:使用迭代器遍历列表
lst = [1, 2, 3]
it = iter(lst)
print(next(it)) # 1
print(next(it)) # 2
print(next(it)) # 3
示例二:使用迭代器遍历自定义类
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"{self.name}({self.age})"
def __iter__(self):
self.index = -1
return self
def __next__(self):
self.index += 1
if self.index >= 2:
raise StopIteration
if self.index == 0:
return self.name
else:
return self.age
p = Person("Tom", 18)
it = iter(p)
print(next(it)) #Tom
print(next(it)) #18
print(next(it)) #StopIteration 抛出异常
什么是生成器?
生成器是能够产生值序列的函数,这些值在缩进块中通过 yield
语句生成。当函数被调用时,它并不会立即执行,而是返回生成器对象。类似于迭代器,可以通过 yield
语句逐个获取生成器返回的值。
生成器的使用
使用生成器相当于定义一个函数,其中包含 yield
语句。当函数被调用时,它会返回生成器对象。可以使用 next()
函数或者 for
循环语句逐个获取返回的值,当函数执行完成时,会抛出 StopIteration
异常。
示例三:使用生成器构建Fibonacci序列
def fibonacci(n):
a, b = 0, 1
count = 0
while count < n:
yield b
a, b = b, a + b
count += 1
for x in fibonacci(5):
print(x) # 1, 1, 2, 3, 5
示例四:使用生成器实现扁平化处理
def flatten(lst):
for item in lst:
if isinstance(item, list):
yield from flatten(item) #使用yield from简化代码
else:
yield item
lst = [[1, [2, 3]], [4, 5, [6, [7]]]]
for item in flatten(lst):
print(item) #1, 2, 3, 4, 5, 6, 7
总结
迭代器和生成器是 Python 程序中非常重要的组成部分。通过合理运用迭代器和生成器可以让程序在运行速度和内存空间两方面得到更好的优化。正因如此,JavaScript、PHP、Ruby等编程语言也加入了对迭代器和生成器的支持。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中的迭代器与生成器使用及说明 - Python技术站