可迭代对象iterable:

  • 对象字面意思:Python中一切皆对象。一个实实在在存在的值。
  • 可迭代:更新迭代。迭代是一个重复的过程,每次重复是基于上一次的结果而继续的,每次都有新的内容。
  • 可迭代对象:可以进行循环更新的一个实实在在的值。
  • 专业角度:内部含有'_ iter _'方法的对象。
  • 目前学过的可迭代对象:

    str,list,tuple,dic,set,range()。

获取一个对象的所有方法:dir()

  • dir():将所有方法以字符串的方式,放在一个列表中,返回这个列表。

    # 例:
    
    s = 'abc'
    print(dir(s))
  • 判断一个对象是否是可迭代对象:'_iter_' in dir()

    例:

    s = 'abc'
    print('__iter__' in dir(s)) # 返回 True 即表示'__iter__'在这个列表中,此对象为可迭代

可迭代对象优点:

  • 1.存储的数据能直接显示,比较直观。
  • 2.拥有的方法比较多,操作方便。

缺点:

  • 1.占内存
  • 2.不能直接通过for循环,只能通过索引,key取值

    注: for循环能进行取值是因为在底层做了转换,将可迭代对象转换成迭代器,然后取值。

迭代器对象iterator:

  • 字面意思:可迭代取值的工具(数据结构)。
  • 专业角度:内部含有' _ _iter_ _'方法并且含有'_ _next_ _' 方法的对象就是迭代器。
    • 比如:文件句柄。
# 判断是否是迭代器:
'__iter__' in dir(对象) and '__next__ in dir(对象)

可迭代对象转换成迭代器:

s = 'abc'
obj = iter(s) # 将s转换为迭代器,也可用 s.__iter__() print(obj) # <str_iterator object at 0x0000000001E1B040>
print(next(obj)) # a 对迭代器进行取值
print(next(obj)) # b 执行一次取一个值
print(next(obj)) # c 多一个next会报错 StopIteration
迭代器调用iter()方法得到的是迭代器本身,这样做是使for循环的工作机制一致

for 循环工作机制(也可称之为迭代器循环):

  • 1、调用iter()方法得到一个可迭代对象

  • 2、迭代器对象调用next()得到一个返回值,将该值赋值给变量.

  • 3、循环步骤2,直到抛出Stopiteration异常,for循环会捕捉异常然后停止循环

    d = {'a':1,'b':2,'c':3}
    for i in d: # for会将d调用iter()方法,若d本身为迭代器,那么调用iter方法相当于迭代器本身
    print(i)
    • list() 原理同for循环

迭代器优点:

  • 1.节省内存

    • 迭代器在内存中相当于只占一个数据的空间:因为每次取值上一条数据会在内存中释放,再加载当前的此条数据。
  • 2.惰性机制
    • next一次取一个值,绝不多取值。

迭代器缺点:

  • 1.速度慢,以时间换空间。
  • 2.只能往下取值,不走回头路
  • 3.不直观。操作方法单一。

while循环模拟for循环对可迭代对象进行取值的机制:

# while循环也称为条件循环
li = [11,22,33,44,55,66,77,88]
obj = iter(li)
while 1:
try:
print(next(obj))
except StopIteration:
break

最新文章

  1. l5如何通过路由走api版本回退查找设置
  2. [Android实例] 有关spinner 的item问题 谁能给解答下??
  3. mysql字段额外属性,除去字段类型外的其他属性
  4. 【python PIL学习】给照片打水印
  5. 如何调试什么时候SaveFileDialog会被Dispose
  6. Nginx高并发配置思路(轻松应对1万并发量)
  7. css元素居中
  8. SPI总线的4种工作模式
  9. android studio下的NDK开发详解(一)
  10. python socket编程实现的简单tcp迭代server
  11. 安装redis 2.6.4
  12. Linux IPMI 配置管理.md
  13. 训练赛-Building Numbers
  14. 【代码笔记】Web-ionic单选框
  15. 使用ajax无法跨源问题总结
  16. Spring Cloud Feign Ribbon 配置
  17. JpGraph使用详解之中文乱码解决方法
  18. Mycat分片规则详解
  19. (ex)Lucas总结
  20. Spring MVC过滤器-登录过滤

热门文章

  1. Robotframework自动化7-数据库连接
  2. mariadb 2
  3. 1000000 / 60S 的 RocketMQ 不停机,扩容,平滑升级!
  4. J.U.C之Executor框架入门指引
  5. 方法区(Method Area)基础知识
  6. Spring的IOC控制反转和依赖注入-重点-spring核心之一
  7. LazySysAdmin 靶机渗透
  8. xss利用——BeEF#stage2(初始并持续化控制)
  9. Java Web项目获取客户端和服务器的IP地址
  10. mysql及联合查询