Iterators
容器可以提供迭代器(按顺序访问其元素)
iter(iterable)
: 在可迭代值的元素上返回一个迭代器next(iterator)
: 返回迭代器中的下一个元素这个功能可以由 带 nonlocal index 的高阶函数实现
dictionary
字典的 key, value, item(输出的是tuple) 都是可迭代的
字典的 size 在 iter 中不能改变
在 for 循环中用 iter
iter 中已经输出的值不会再出现
range 每次都能输出想要的值
Build-in Iterator Functions
许多内建的 Python 序列操作都会返回迭代器,这些迭代器会 lazily 地计算结果
map(func, iterable):
: Iterate over func(x) for x in iterablefilter(func, iterable):
: Iterate over x in iterable if func(x)zip(first_iter, second_iter):
: Iterate over co-indexed (x, y) pairsreversed(sequence):
: Iterate over x in a sequence in reverse order
要查看迭代器的内容,将生成的元素放入一个容器中:
list(iterable)
: Create a list containing all x in iterabletuple(iterable)
: Create a tuple containing all x in iterablesorted(iterable)
: Create a sorted list containing x in iterable
生成器(generator)
特殊的 iterator
从生成器函数而来
生成函数是一个产生值(yields values)而不是返回值(returning them)的函数。
一个普通函数只 return 一次,一个生成函数可以 yield 多次。
生成器是通过调用生成器函数自动创建的迭代器
当调用生成器函数时,它返回一个生成器,该生成器对其 yields 进行迭代。
生成函数和 迭代器 类似,都是 lazily 地运算的。因此 yield 后在那个框架会暂停
yield from
生成器有时候也要输出迭代器
yield from 语句产生一个 迭代器 或 所有可迭代的值
Last updated
Was this helpful?