博客地址:http://www.cnblogs.com/yudanqu/

1、可迭代对象 

  • 在介绍迭代器之前呢,我们先聊一下可迭代对象(Iterable),可迭代对象就是可以直接作用于for循环的对象。
  • 那么什么是可以直接用于for循环的呢?
  • 可以直接用于for的数据类型一般分为两种:

    1、集合数据类型,如list、tuple、dict、set、string……

    2、generator,包括生成器和带yield的generator function

  • 那么我们如何判断一个对象是否是可迭代对象呢?答:isinstance()

  ************************************************************************************************************************************

  描述:isinstance() 函数来判断一个对象是否是一个已知的类型

  语法:isinstance(object, classinfo)

  参数:(1)object -- 实例对象

        (2)classinfo -- 可以是直接或间接类名、基本类型或者由它们组成的元组

  返回值:如果对象类型与classinfo的类型相同则返回True,否则返回False

  ************************************************************************************************************************************

  那么我下面给大家看个小栗子:

  在这里面,首先我导入的Iterable的包,也就是可迭代对象,下面的四条语句是分别查看列表、元组、字典、字符串的类型,可以看到他们四个都是可迭代对象,当然,可迭代对象远不止这些,这里只是给大家一个概念,并且看一下isinstance的使用方法。如果你还不能理解的话,可以想一下,你有没有写过这样一句话(for i in [1,2,3,4,5]),这是一个循环的表示方法,这里面就是在循环列表中的元素,来实现内部语句块。也可以说成是遍历这个列表,当然也就是迭代了。

2、迭代器

  迭代器就是不但可以作用于for循环,还可以被next()不断的调用并返回下一个值,知道最后抛出一个错误StopIteration错误,表示无法继续返回下一个值。

 对比:
  
  可以被next()函数调用并不断返回下一个值得对象称为迭代器 (Iterator)   可以直接作用于for循环的对象统称为可迭代对象(Iterable)

   下面又是一个小栗子:

  

  里面的isinstance依然是判断类型,我们可以看到,(x for x in range(5))是一个迭代器,我们可以把这个迭代器用一个属性来接收,这样方便我们调用。注意上面提到的,迭代器是可以被next()调用的,所以我们next(L)来迭代输出里面的值。

  

  现在的这些返回值为False,大家应该了解他的原因了吧,[](){}"" 等等这些都只是可迭代对象,而不是迭代器。(注意那两个单词是不一样的)

  除此之外还需要说明的一点是,其他的数据类型也可以转为迭代器:

# 例如:列表转迭代器:
a = iter([1,2,3,4])
print(next(a))

  元组,字符串,字典都可以这样。

*下面用一个小案例让大家看下他的用法

endstr = 'end'
str = "" for line in iter(input,endstr):
str += line + '\n' print(str)
#目的就是为了使input不直接退出,可以换行继续输入;而且在打印str时也可以分行同时打印

  看一下效果:

  

  迭代器大概就先介绍到这里,欢迎大家和我来一起学习。

  作者:渔单渠(yudanqu)

  博客地址:http://www.cnblogs.com/yudanqu/

python--迭代器(Iterator)的更多相关文章

  1. python 迭代器 Iterator

    一.可迭代对象定义 可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str.bytes.bytearray等: 一类是generator, ...

  2. Python迭代器(Iterator)

    概述 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 延迟计算或惰性求值 (Lazy evaluation) 迭代器不要求你 ...

  3. [TimLinux] Python 迭代器(iterator)和生成器(generator)

    1. 可迭代对象 from collection import Iterable class Iterable(metaclass=ABCMeta): ... def __iter__(self): ...

  4. Python的迭代器(iterator)和生成器(constructor)

    一.迭代器(iterator) 1.迭代器的概述 在Python中,for循环可以用于Python中的任何类型,包括列表.元祖等等,实际上,for循环可用于任何“可迭代对象”,这其实就是迭代器 迭代器 ...

  5. Python进阶内容(四)--- 迭代器(Iterator)与生成器(Generator)

    迭代器 我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的ge ...

  6. Python学习笔记 - 迭代器Iterator

    我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的genera ...

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

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

  8. Python学习笔记014——迭代器 Iterator

    1 迭代器的定义 凡是能被next()函数调用并不断返回一个值的对象均称之为迭代器(Iterator) 2 迭代器的说明 Python中的Iterator对象表示的是一个数据流,被函数next()函数 ...

  9. 学习python第十二天,函数4 生成器generator和迭代器Iterator

    在Python中,这种一边循环一边计算的机制,称为生成器:generator 要创建一个generator,有很多种方法.第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个genera ...

  10. Python 生成器 (generator) & 迭代器 (iterator)

    python 生成器 & 迭代器 生成器 (generator) 列表生成式 列表生成式用来生成一个列表,虽然写的是表达式,但是储存的是计算出来的结果,因此生成的列表受到内存大小的限制 示例: ...

随机推荐

  1. 个人项目:Java实现WC

    Java实现WC Github项目地址:https://github.com/auxshaw/WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个 ...

  2. SQL中常用数学函数

    --1 RAND() 返回0到1的随机值,若不指定随机种子,返回值不同;若指定的种子相同则随机值相同SELECT RAND()SELECT RAND()SELECT RAND(100)SELECT R ...

  3. Linux下对lvm逻辑卷分区大小的调整(针对xfs和ext4不同文件系统)

    当我们在安装系统的时候,由于没有合理分配分区空间,在后续维护过程中,发现有些分区空间不够使用,而有的分区空间却有很多剩余空间.如果这些分区在装系统的时候使用了lvm(前提是这些分区要是lvm逻辑卷分区 ...

  4. 洗礼灵魂,修炼python(79)--全栈项目实战篇(7)—— 多级目录菜单之地址管理系统升级版

    要求: 1.在上一篇的地址管理系统的基础上做升级改动 2.添加增删改的功能 3.尽量的贴近生活常识中的地址管理 分析: 需求不用多说了,干就完了 相关文件源码地址:github 这次由于要有增删改的操 ...

  5. SogouCloud.exe进程导致SQL Server服务无法启动

    早上打开笔记本想开启SQL Server服务时报错,于是根据提示查看windows日志: 依次点开报错发现第一条是1433端口被占用,于是找相关的进程: 于是杀掉此进程: taskkill /pid ...

  6. SQL的日期转换

    日期转会计期 SUBSTRING(CONVERT(VARCHAR,getdate(), 20), 1, 7)   2015-06 SUBSTRING(CONVERT(VARCHAR,DATEADD(m ...

  7. LeetCode算法题-Power Of Three(Java实现-七种解法)

    这是悦乐书的第204次更新,第215篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第71题(顺位题号是326).给定一个整数,写一个函数来确定它是否为3的幂.例如: 输入 ...

  8. LeetCode算法题-House Robber(Java实现)

    这是悦乐书的第187次更新,第189篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第46题(顺位题号是198).你是一个专业的强盗,计划在街上抢劫房屋. 每个房子都藏着一 ...

  9. 【算法】LeetCode算法题-Implement strStr

    这是悦乐书的第151次更新,第153篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第10题(顺位题号是28).给定两个任意字符串haystack.needle,返回hay ...

  10. May 31. 2018 Week 22nd Thursday

    The good seaman is known in bad weather. 惊涛骇浪,方显英雄本色. As we all know, the true worth of a person is ...