python学习干货教程(15):迭代器和生成器

迭代器

迭代器是一个可以记住遍历的位置的对象。

有两个操作迭代器的内置函数:iter()next()

iter() ——内置函数

返回迭代器对象,语法:

iter(object[, sentinel])

参数:

object -- 可迭代对象

sentinel -- 如果传递了第二个参数,则参数 object 必须是一个可调用的对象(如,函数),此时,iter 创建了一个迭代器对象,每次调用这个迭代器对象的__next__()方法时,都会调用 object。

next() ——内置函数

调用迭代器对象的__next__()方法,返回下一个迭代器对象。

语法:

next(iterator[, default])

参数说明:

iterator -- 可迭代对象

default -- 可选,用于设置在没有下一个元素时返回该默认值,如果不设置,又没有下一个元素则会触发 StopIteration 异常。


可迭代对象都可用于创建迭代器,迭代器对象可以使用常规for语句或者next() 函数进行遍历。

把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__() 与 __next__() 。

__iter__() 方法返回一个实现了 __next__() 方法并通过 StopIteration 异常标识迭代的完成。的迭代器对象, 这个迭代器对象

__next__() 方法会返回下一个迭代器对象。

StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 __next__() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代。


生成器

使用了 yield关键字的函数被称为生成器(generator)。

生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

对一个生成器函数的调用,返回的是一个迭代器对象。

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield的值, 并在下一次执行 next() 方法或for语句时从当前位置继续运行。


yield实例


转载于:https://juejin.im/post/5cd39b3c51882535d25674e8

你可能感兴趣的:(python)