1、一个类必须实现iter的方法
2、iter方法的返回一个迭代器的对象
迭代器:有iter方法和next方法,可以取里面的值
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/aab4f43651650c1de22fdc2c20a2b813.png)
for循环
1、判断是否是一个可以迭代的对象
对象里面是否有iter方法
2、会调用iter函数来取返回值
返回值是谁,接下来的for循环,就调用返回值的next的方法
3、每for一次就调用next()方法,next()返回啥就给for循环赋值啥
每次返回list[0]
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0fb3cef1ad378f8653ab6c23f1115251.png)
每次返回list[]
越界了
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0499e0defa465c2e25c710faa0e6cf3c.png)
<len,会返回null
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/db0707f3e7c1c15460b0ed3d4b36d6d7.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/883270eb3f2d0c6803e47c28ffc7d5c1.png)
<len,直接终止循环,自定义抛出异常
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/2c3d567a25d3f2802d0cb5dd3c03c2df.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/af3cc689439324a5d58211badb2ddc3f.png)
终极完善
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/27a8c6c54635352f99c486aeeffda655.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d2464e1a2e7ed8dc51d56e067ded9051.png)
迭代器应用场景
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c078896474e456ef446f437d1060068a.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/065ec094900da367fde3d4f22af8061a.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c58fa4ab14939f2b0d4a6594cd5987fe.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/22ca53bdd4a2445469c9626f43978727.png)
重新生成一个列表,next一个一个取出来放进去