可迭代对象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

Python可迭代对象和迭代器对象的更多相关文章

  1. Python中的可迭代对象与迭代器对象

    刚刚学习Python,对“可迭代对象”和"迭代器对象"的个人理解,不知道对不对. 1.几个概念 (1)迭代工具:包括for循环.列表解析.in成员关系测试.....等等在内的,用于 ...

  2. python学习Day14 带参装饰器、可迭代对象、迭代器对象、for 迭代器工作原理、枚举对象、生成器

    复习 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.返回内部函数对象---->  延迟执行, 开放封闭原则: 功能可以拓展,但源代 ...

  3. python基础一 ------可迭代对象和迭代器对象

    可迭代对象和迭代器对象:前者生成后者 比喻:10个硬币都可以一一数(迭代),放入到存钱罐(可以取钱的那种),那这个存钱罐就是一个迭代器对象 需求:从网络抓取各个城市气温信息,并依次显示若依次抓取较多的 ...

  4. python迭代-可迭代对象与迭代器对象

    可迭代对象与迭代器对象 问题举例 某软件要求,从网络抓取各个城市的气温信息,并依次显示: 北京:15~22 上海:18~23 ...... 如果一次抓取所有城市气温信息再显示,显示第一个城市的气温时会 ...

  5. Day 13 可迭代对象,迭代器对象,for循环迭代,生成器对象,枚举对象

    一.迭代器概念:# 器:包含了多个值的容器# 迭代:循环反馈(一次从容器中取出一个值)# 迭代器:从装有多个值的容器中一次取出一个值给外界# ls = 'abcdef'ls = [1, 2, 3, 4 ...

  6. 可迭代对象,迭代器对象,for循环

    迭代器:迭代的工具.迭代是更新换代,如你爷爷生了你爹,你爹生了你,迭代也可以说成是重复,并且但每一次的重复都是基于上一次的结果来的.如计算机中的迭代开发,就是基于软件的上一个版本更新.以下代码就不是迭 ...

  7. 8、如何实现可迭代对象和迭代器对象 9、如何使用生成器函数实现可迭代对象 10、如何进行反向迭代以及如何实现反向迭代 11、如何对迭代器做切片操作 12、如何在一个for语句中迭代多个可迭代对象

    8.如何实现可迭代对象和迭代器对象 PS:注意重载Iterator方法的时候,需要和原来的方法名一样,否则创建实例时会报错 from collections import Iterator,Itera ...

  8. day 13 迭代器、可迭代对象、迭代器对象、生成器、生成器对象、枚举对象

    迭代器大概念 # 迭代器:循环反馈的容器(集合类型)# -- 不同于索引取值,但也可以循环的从容器对象中从前往后逐个返回内部的值​# 优点:不依赖索引,完成取值# 缺点:不能计算长度,不能指定位取值( ...

  9. day14带参装饰器,迭代器,可迭代对象 , 迭代器对象 ,for迭代器 , 枚举对象

    复习 ''' 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.验证执行 开放封闭原则: 功能可以拓展,但源代码与调用方式都不可以改变 装饰 ...

随机推荐

  1. 大写的服,看完这篇你还不懂RocketMQ算我输

    目录 RocketMQ介绍 RocketMQ概念 为什么要用RocketMQ? 异步解耦 削峰填谷 分布式事务最终一致性 数据分发 RocketMQ架构 RocketMQ消息类型 普通消息 顺序消息 ...

  2. [LeetCode]面试题 01.06. 字符串压缩

    题目 字符串压缩.利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能.比如,字符串aabcccccaaa会变为a2b1c5a3.若"压缩"后的字符串没有变短,则返回原先 ...

  3. [剑指Offer]33-根据后序序列判断是否能组成BST

    题目 如题. 题解 从序列第一个大于根节点的值往后都是右子树,判断右子树是否都大于根节点. 然后递归判断左右子树是否是BST 代码 class TreeNode { int val = 0; Tree ...

  4. [HDOJ1232]畅通工程(并查集)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1232 题目描述 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表, ...

  5. EF CodeFirst学习

    EF CodeFirst 真是时光如梦,岁月如歌,自己一不留神就被后浪拍在了沙滩上,就连我要学的这个东西也是12年就在博客园很火了. EF有三种开发模式,DatabaseFirst, ModelFir ...

  6. 原生js实现懒加载并节流

    像淘宝网站等,页面中有着大量图片,一次性全部加载这些图片会使浏览器发送大量请求和造成浪费.采用懒加载技术,即用户浏览到哪儿,就加载该处的图片.这样节省网络资源.提升用户体验.减少服务器压力. 方法1: ...

  7. ECMAScript6入门学习--第一天

    ECMAScript与javascript的关系 ECMA是是一个国际标准化的一个组织,规定了浏览器脚本的语言标准,在上个实际,javascript公司Netscape把javascript托付给EC ...

  8. Windows批处理(cmd/bat)常用命令学习

    前言 批处理文件(batch file)包含一系列 DOS命令,通常用于自动执行重复性任务.用户只需双击批处理文件便可执行任务,而无需重复输入相同指令.编写批处理文件非常简单,但难点在于确保一切按顺序 ...

  9. Java多线程--公平锁与非公平锁

    上一篇文章介绍了AQS的基本原理,它其实就是一个并发包的基础组件,用来实现各种锁,各种同步组件的.它包含了state变量.加锁线程.等待队列等并发中的核心组件,现在我们来看一下多线程获取锁的顺序问题. ...

  10. Django在Linux上uwsgi 与nginx的问题与解决

    1.出现只有weclome to nginx 多半是是nginx的配置文件没有修改,把他的路由注释掉. 我是修改错文件夹了,一直在自己下载而非运行的文件夹修改 2.出现502 出现了多次502这里一一 ...