迭代器(iterators)迭代(Iteration)可被迭代的对象与迭代器生成器 Generatorsyield 返回信息yield 接收信息迭代器(iterators)
迭代器是一个让程序员(特别是列表)的。
任意对象,只要定义了next(Python2) 或者next方法,它就是一个迭代器。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代(Iteration)
当我们使用一个循环来遍历某个东西时,这个过程本身就叫迭代。
可被迭代的对象与迭代器
迭代器是可以迭代的,但是可被迭代的,不一定就是迭代器了。
例如字符串,列表或元组对象,它们都是可被迭代的,但是它们并不是迭代器。
在解释这个问题,我们需要了解一个python内置函数 ,它允许我们获取一个迭代器的下一个元素
python内置函数 可用于将一个对象转换为迭代器。
迭代器对象可以使用常规for语句进行遍历:
生成器 Generators
在python中,使用了 yield 的函数被称为生成器(generator)。跟普通函数不同的是,,只能用于迭代操作,更简单点理解生成器就是一个迭代器。调用生成器,会返回一个迭代器
yield 返回信息
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
下面是一个计算斐波那契数列的生成器:
运行结果:
代码解释:
将会生成一个迭代器对象fibon_it
通过for循环,来迭代一个迭代器对象fibon_it
首次迭代时,代码运行到,返回a的值,即1,打印“1”然后暂停。
第二次迭代时,代码直接从语句后面一行开始执行,运行 后,a=1,b=2。在这个代码中,会因为循环又执行到,返回a的值,此时a依然为1,打印“1”,然后暂停。
第三次迭代时,代码又从语句后面一行开始执行,运行 后,a=2,b=3,返回a的值,即打印“2”,然后暂停
以此类推
yield 接收信息
当生成器的方法被调用时,它会准确地从离开地方继续执行。当生成器的方法被调用时,yield会接收send方法传入的实参,并且从yield暂停的地方开始继续执行。
运行结果如:
领取专属 10元无门槛券
私享最新 技术干货