内置迭代器
在 Python 中,有几个内置函数接受可迭代对象作为参数并返回迭代器。这些函数广泛用于懒惰序列处理。
map
函数
map
函数是懒惰的:调用它不会执行计算以计算其结果的元素。相反,会创建一个迭代器对象,该对象可以在查询时返回结果。我们可以在以下示例中观察到这一点,其中 print
调用被延迟,直到从 doubled
迭代器请求相应的元素。
def double_and_print(x):
print('***', x, '=>', 2*x, '***')
return 2*x
s = range(3, 7)
doubled = map(double_and_print, s) # double_and_print 尚未调用
print(next(doubled)) # double_and_print 调用一次
# *** 3 => 6 ***
# 6
print(next(doubled)) # double_and_print 再次调用
# *** 4 => 8 ***
# 8
print(list(doubled)) # double_and_print 再次调用两次
# *** 5 => 10 ***
# *** 6 => 12 ***
# [10, 12]
filter
函数
filter
函数返回一个迭代器,该迭代器包含通过给定条件函数的元素。
def is_even(x):
return x % 2 == 0
s = range(3, 7)
filtered = filter(is_even, s)
print(next(filtered)) # 4
print(next(filtered)) # 6
zip
函数
zip
函数返回一个迭代器,该迭代器将多个可迭代对象的元素按顺序配对。
a = [1, 2, 3]
b = ['a', 'b', 'c']
zipped = zip(a, b)
print(next(zipped)) # (1, 'a')
print(next(zipped)) # (2, 'b')
reversed
函数
reversed
函数返回一个迭代器,该迭代器按相反顺序生成可迭代对象的元素。
s = [1, 2, 3]
reversed_s = reversed(s)
print(next(reversed_s)) # 3
print(next(reversed_s)) # 2