迭代是访问集合元素的一种方式。

迭代器是一个可以记住遍历的位置的对象。

迭代器对象从集合的第一 个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

1. 可迭代对象 以直接作用于 for 循环的数据类型有以下几种:

  一类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等;

  一类是 generator ,包括生成器和带 yield 的generator function。

这些可以直接作用于 for 循环的对象统称为可迭代对象: Iterable 。

2. 判断是否可以迭代 可以使用 isinstance() 判断一个对象是否是 Iterable 对象:

from collections import Iterable

print(isinstance([],Iterable)) # 列表  True
print(isinstance((),Iterable)) # 元组 True
print(isinstance({},Iterable)) # 字典 True
print(isinstance('meng',Iterable)) #字符串 True
print(isinstance((x for x in range(5)),Iterable)) #生成器 True

结果为:都为True, 说明容器和生成器都是可迭代对象

3. 迭代器:

from collections import Iterator

print(isinstance([],Iterator))  # 列表  False
print(isinstance((),Iterator)) # 元组 False
print(isinstance({},Iterator)) # 字典 False
print(isinstance('meng',Iterator)) # 字符串 False
print(isinstance((x for x in range(5)),Iterator)) # 生成器 True

由此结果可以看出:容器只是可迭代对象,并不是迭代器

4. iter()函数:

生成器都是 Iterator 对象,但 list 、 dict 、 str 虽然是 Iterable ,却不是 Iterator 。 把 list 、 dict 、 str 等 Iterable 变成 Iterator 可以使用 iter() 函数:

print(isinstance(iter([]),Iterator))  # 列表  True

总结:

  凡是可作用于 for 循环的对象都是 Iterable 类型;

  凡是可作用于 next() 函数的对象都是 Iterator 类型

  集合数据类型如 list 、 dict 、 str 等是 Iterable 但不是 Iterator ,不过可以通过 iter() 函数获得一个

可迭代对象(Iterable)和迭代器(Iterator)的更多相关文章

  1. 【Python之路】特别篇--生成器(constructor)、迭代器(iterator)、可迭代对象(iterable)

    生成器(constructor) 生成器函数在Python中与迭代器协议的概念联系在一起.包含yield语句的函数会被特地编译成生成器 !!! 当函数被调用时,他们返回一个生成器对象,这个对象支持迭代 ...

  2. Python中的可迭代Iterable和迭代器Iterator

    目录 Iterable可迭代对象 如何判断对象是否是可迭代对象Iterable Iterator迭代器 如何判断对象是否迭代器Iterator 将Iterable转换成Iterator Iterabl ...

  3. python生成器(generator)、迭代器(iterator)、可迭代对象(iterable)区别

    三者联系 迭代器(iterator)是一个更抽象的概念,任何对象,如果它的类有next方法(next python3)和__iter__方法返回自己本身,即为迭代器 通常生成器是通过调用一个或多个yi ...

  4. 对象转型、迭代器Iterator、Set集合、装箱与拆箱、基本数据类型与字符串的转换、TreeSet集合与对象

      包的声明与定义 需要注意的是,包的声明只能位于Java源文件的第一行. 在实际程序开发过程中,定义的类都是含有包名的: 如果没有显式地声明package语句,创建的类则处于默认包下: 在实际开发中 ...

  5. 完全理解Python迭代对象、迭代器、生成器

    在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导式(list,set,dict ...

  6. 理解Python迭代对象、迭代器、生成器

    作者:zhijun liu链接:https://zhuanlan.zhihu.com/p/24376869来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 本文源自RQ作 ...

  7. 完全理解 Python 迭代对象、迭代器、生成器(转)

    完全理解 Python 迭代对象.迭代器.生成器 本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators » nvie.com,俺写的这篇文章是 ...

  8. Python生成器,迭代器,可迭代对象

    在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导式(list,set,dict ...

  9. 完全理解 Python 迭代对象、迭代器、生成器

    完全理解 Python 迭代对象.迭代器.生成器 2017/05/29 · 基础知识 · 9 评论 · 可迭代对象, 生成器, 迭代器 分享到: 原文出处: liuzhijun    本文源自RQ作者 ...

随机推荐

  1. Github好桑心,慢慢来吧,等待中

    等了大半天还是没办法注册,在线求助...

  2. Java中的IO流,Input和Output的用法,字节流和字符流的区别

    Java中的IO流:就是内存与设备之间的输入和输出操作就成为IO操作,也就是IO流.内存中的数据持久化到设备上-------->输出(Output).把 硬盘上的数据读取到内存中,这种操作 成为 ...

  3. MVC002之获取当前用户失败(Context.User.Identity.Name)

    通过Context.User.Identity.Name想获取当前用户的域帐号信息(如:Greatwall\Snow) 可值等于"",什么原因呢. 该问题和MVC关系不大,主要是I ...

  4. ICMP隧道 ptunnle

    通过ICMP echo(ping request)和reply(ping reply)实现隧道 适用于防火墙只允许ping出站流量的环境 支持多并发连接,性能优 支持身份验证 使用时需要root用户 ...

  5. MVC中html编码与否

    MVCHtmlString可以不进行编码. 例子:string s=‘<a style="color:red">链接</a>’: 1.@s,直接输出< ...

  6. 解决谷歌浏览器频繁出现adobe flash player因过期而遭到阻止的问题(转自知乎)

    作者:在战争中链接:https://www.zhihu.com/question/32223811/answer/128088278来源:知乎著作权归作者所有,转载请联系作者获得授权. 很多新用户在安 ...

  7. dedecms 5.7sp2在用type标签时出现调用无效问题

    {dede:type typeid='1'}栏目{/dede:type}   无效 和 {dede:type typeid='1'}[field:typename/]{/dede:type}   有效 ...

  8. zabbix监控常见系统报错

    CPU触发器:1)Processor load is too high on {HOST.NAME} {HOST.NAME}上处理器负载太高触发器表达式:{Zabbix server:system.c ...

  9. 最小生成树算法(krustra+prime)

    给你一个图,求让图连通的边权和最小值 krustra算法是基于加边法,将所有边权排序,每次加一条边,将两个点放在同一个集合中.如果新加的点不在同一个集合中,就合并(并查集) 涉及到排序,可以用结构体存 ...

  10. git config --global user.email

    加上这个就ok