迭代对象;;迭代是Python最强大的功能之一,是访问集合元素的一种方式。
之前介绍的Python容器对象都可以用for循环进行遍历,代码如下。;迭代器(iterator)有两个基本的函数:iter函数和next函数。
如果for循环在容器对象上调用iter函数,那么该函数会返回一个定义next函数的迭代对象,iter函数会在容器对象中逐一访问元素。
当容器对象遍历完毕,next函数找不到后续元素时,将会引发一个StopIteration异常,终止for循环,代码如下。;迭代器是一个可以记录遍历位置的对象,从第1个元素被访问开始,直到所有元素被访问完结束。迭代器只能往前,不能退后。
要将迭代器加入类中,需要定义一个__iter__()方法,它返回一个有next函数的对象。如果类定义了next函数,那么__iter__()方法可以只返回self参数。代码示例如下。;生成迭代器;;生成器是一个返回迭代器的函数,它可以通过常规的def关键字来定义,但是不用return语句返回,而是用yield语句一次返回一个结果。
一般的函数在生成值后会退出,但生成器在生成值后会自动挂起,暂停执行状态并保存状态信息。当函数恢复时,这些状态信息将再度生效,通过在每个结果之间挂起和继续它们的状态自动实现迭代器协议。
通过生成斐波那契数列来对比有yield语句和没有yield语句的情况,进一步了解生成器,代码如下。;1.yield语句;1.yield语句;列表解析的一般形式如下。;当序列过长,而每次只需要获取一个元素时,应当考虑使用生成器表达式
生成器表达式是被圆括号括起来的,列表解析式是被方括号括起来的;生成器表达式返回的是一个生成器对象,而列表解析返回的是一个新列表。生成器表达式的一般形式如下。;使用生成器表达式求出1~10内3或5的倍数,代码如下。;;【任务6-3】迭代Car类