迭代器和生成器
Iterator是一个对象,它允许程序员遍历集合的所有元素,而不管其具体实现如何。在 Python 中,迭代器对象实现了两个方法,iter()和next().
String、List 或 Tuple 对象可用于创建 Iterator。
#!/usr/bin/python3
import sys
list = [1,2,3,4]
it = iter(list) # this builds an iterator object
print (next(it)) #prints next available element in iterator
#Iterator object can be traversed using regular for statement
for x in it:
print (x, end=" ")
#or using next() function
while True:
try:
print (next(it))
except StopIteration:
sys.exit()
generator是一个使用 yield 方法产生或产生一系列值的函数。
当一个生成器函数被调用时,它甚至没有开始执行函数就返回一个生成器对象。当第一次调用 next() 方法时,该函数开始执行,直到它到达 yield 语句,该语句返回产生的值。yield 保持跟踪,即记住最后一次执行,第二个 next() 调用从以前的值继续。
例子
下面的示例定义了一个生成器,它为所有斐波那契数生成一个迭代器。
#!usr/bin/python3
import sys
def fibonacci(n): #generator function
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(5) #f is iterator object
while True:
try:
print (next(f), end=" ")
except StopIteration:
sys.exit()