专栏首页赖权华的笔记Python笔记(十六):迭代器

Python笔记(十六):迭代器

(一)iterable对象和Iterator对象的区别

    iterable对象(可迭代的对象):可以使用for循环,例如:字符串、列表 、字典 、集合等

    Iterator对象(迭代器):除了可以用for循环外,还可以用next()不断获取下一个元素.

    __iter__() 和__next__()这2个方法都实现了的,就是Iterator。只实现__iter__() 方法的就是iterable。

 1 from collections import Iterable
 2 from collections import Iterator
 3 
 4 class peo():
 5 
 6     def __init__(self,x):
 7         self.x = x
 8     def __iter__(self):
 9         return self
10 
11 
12 p = peo([1,2,3,4])
13 
14 print(isinstance(p,Iterable)) #判断是否是Iterable对象

__iter__() 和__next__()2个方法都实现的,才是迭代器:Iterator

 1 from collections import Iterable
 2 from collections import Iterator
 3 
 4 class peo():
 5 
 6     def __init__(self,x):
 7         self.x = x
 8     def __iter__(self):
 9         return self
10     def __next__(self):
11         return self
12 
13 p = peo([1,2,3,4])
14 
15 print(isinstance(p,Iterable))
16 print(isinstance(p,Iterator))

所以,Iterator对象肯定也是iterable对象,但iterable对象却不一定是Iterator对象。

我们可以使用next()不断获取Iterator对象的下一个元素,直到抛出StopIteration错误

1 the_iter = iter([1,2,3])
2 
3 print(next(the_iter))
4 print(next(the_iter))
5 print(next(the_iter))
6 
7 print(next(the_iter))

(二)for循环的工作方式

在上面的例子中,实际可以用for循环.

1 the_iter = iter([1,2,3])
2 
3 
4 for i in the_iter:
5     print(i)

for循环的工作方式:上面这段代码实际上和下面这段代码是一样的

 1 the_iter = iter([1,2,3])
 2 
 3 
 4 
 5 while True:
 6     try:
 7         element = next(the_iter)
 8         print(element)
 9     except StopIteration:
10         # 如果抛出异常,退出循环
11         break

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • API自动化测试笔记(二):测试数据

    1、用例执行前需要的前置条件,例如我验证正确账户、密码能否成功登录,首先就需要一个已经注册的用户。

    free赖权华
  • robot framework笔记(三):扩展SeleniumLibrary库 (自定义关键字)

    以下代码GitHub 版本库地址: https://github.com/blairwind/blog_rf

    free赖权华
  • Python笔记(七):字典、类、属性、对象实例、继承

    (一)  简单说明    字典是Python的内置数据结构,将数据与键关联(例如:姓名:张三,姓名是键,张三就是数据)。例如:下面这个就是一个字典 {'姓名':...

    free赖权华
  • Iterable、Sequece、Iterator、generator

    一篇文章彻底了解 可迭代对象(Iterable)、序列(Sequence)、迭代器(Iterator)、生成器(generator)。

    用户7685359
  • Python学习 (1)

    在 python中 用import 或者from...import 来导入相应的模块。

    py3study
  • 接口测试框架——读取excel文件

    用户2149234
  • 公司大屏开发心得

    因为大屏不是对外开放的,所以可以使用固定的浏览器。既然这样其实是可以使用一些相对比较新的技术的。所以在布局这块我优先选择使用flexbox技术。

    frontoldman
  • Item描述信息的更改也会导致will trigger ORDERADM_H的update函数触发

    we can find the header update function module is still called - one update recor...

    Jerry Wang
  • 深度学习之卷积神经网络

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    村雨遥
  • Ubuntu 使用笔记

    http://mesquilla.net/exquilla-currentrelease-tb-linux.xpi

    mzlogin

扫码关注云+社区

领取腾讯云代金券