python之迭代器与生成器
迭代器:
迭代是python最强大的功能之一,是访问集合元素的一种方式。
迭代器对象从集合的第一个元素开始访问,知道所有元素被访问结束。迭代器只能往前,不会后退。
迭代器有2个基本方法:iter()和next()
字符串,列表或元组对象都可用于创建迭代器
迭代器对象可以使用for语句进行遍历:
结果为
若你在遍历之前已经执行过一次next,那么遍历后的结果就只有2,3,4,5,6,7,8
创建一个迭代器:
把一个类作为一个迭代器使用需要在类中实现2个方法__iter__()与__next__()
生成器:
在python中,使用了yield的函数被称为生成器。
生成器是一个返回迭代器的函数,每次遇到yield的时候,函数会暂停并保持当前所有的运行,返回yield的值,
并在下一次执行next()方法时从当前位置继续运行。
调用一个生成器函数,返回的是一个迭代对象。
执行以上程序,输出结果为:
注: a,b=b,a+b 等同于 a=b b=a+b
yield备注解析:
- end(msg)与next()的区别在于send可以传递参数给yield表达式,这时传递的参数会作为yield表达式的值,而yield的参数是返回给调用者的值。——换句话说,就是send可以强行修改上一个yield表达式值。比如函数中有一个yield赋值,a = yield 5,第一次迭代到这里会返回5,a还没有赋值。第二次迭代时,使用.send(10),那么,就是强行修改yield 5表达式的值为10,本来是5的,那么a=10
- send(msg)与next()都有返回值,它们的返回值是当前迭代遇到yield时,yield后面表达式的值,其实就是当前迭代中yield后面的参数