python--迭代器(Iterator)

博客地址: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)的更多相关文章
- python 迭代器 Iterator
一.可迭代对象定义 可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str.bytes.bytearray等: 一类是generator, ...
- Python迭代器(Iterator)
概述 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 延迟计算或惰性求值 (Lazy evaluation) 迭代器不要求你 ...
- [TimLinux] Python 迭代器(iterator)和生成器(generator)
1. 可迭代对象 from collection import Iterable class Iterable(metaclass=ABCMeta): ... def __iter__(self): ...
- Python的迭代器(iterator)和生成器(constructor)
一.迭代器(iterator) 1.迭代器的概述 在Python中,for循环可以用于Python中的任何类型,包括列表.元祖等等,实际上,for循环可用于任何“可迭代对象”,这其实就是迭代器 迭代器 ...
- Python进阶内容(四)--- 迭代器(Iterator)与生成器(Generator)
迭代器 我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的ge ...
- Python学习笔记 - 迭代器Iterator
我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的genera ...
- python生成器(generator)、迭代器(iterator)、可迭代对象(iterable)区别
三者联系 迭代器(iterator)是一个更抽象的概念,任何对象,如果它的类有next方法(next python3)和__iter__方法返回自己本身,即为迭代器 通常生成器是通过调用一个或多个yi ...
- Python学习笔记014——迭代器 Iterator
1 迭代器的定义 凡是能被next()函数调用并不断返回一个值的对象均称之为迭代器(Iterator) 2 迭代器的说明 Python中的Iterator对象表示的是一个数据流,被函数next()函数 ...
- 学习python第十二天,函数4 生成器generator和迭代器Iterator
在Python中,这种一边循环一边计算的机制,称为生成器:generator 要创建一个generator,有很多种方法.第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个genera ...
- Python 生成器 (generator) & 迭代器 (iterator)
python 生成器 & 迭代器 生成器 (generator) 列表生成式 列表生成式用来生成一个列表,虽然写的是表达式,但是储存的是计算出来的结果,因此生成的列表受到内存大小的限制 示例: ...
随机推荐
- git 入门教程之初识git
初识 git git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. 背景 我们都知道,Linus 在1991年创建了开源的linux系统,随着不断发展壮大,目前已发展成为最大 ...
- 简单易懂的程序语言入门小册子(1.5):基于文本替换的解释器,递归定义与lambda演算的一些额外说明
这一篇接在第一篇lambda演算的后面.讲讲一些数学知识. 经常有些看似很容易理解的东西,一旦要描述得准确无误,就会变得极为麻烦. 软件工程里也有类似情况:20%的代码实现了核心功能,剩下80%的代码 ...
- Objective-C简介
1.OC简介 全称:Objective-C,是扩充C的面向对象编程语言,主要用于iOS和Mac OS开发. C语言的基础上,增加了一层最小的面向对象语法 完全兼容C语言 可以在OC代码中混入C语言代码 ...
- python 制作一对一聊天
用到的参考资料 https://blog.csdn.net/jia666666/article/details/81624550 https://blog.csdn.net/jia666666/art ...
- Bcompare工具永久使用方法
bcompare的简介 我们在工作中会经常用到bcompare工具:合入驱动,对比原始文件等. bcompare,即Beyond Compare 是一个综合的比对工具. 可比对的对象包括纯文字档. ...
- JAVA API的下载和中文查看API
一.JAVA API的下载 1.1 JAVA由SUN公司开发,2006年SUN公司宣布将Java技术作为免费软件对外发布,标志着JAVA的公开免费.2009年,SUN公司被甲骨文公司收购,因此我们现在 ...
- LeetCode算法题-Third Maximum Number(Java实现-四种解法)
这是悦乐书的第222次更新,第235篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第89题(顺位题号是414).给定非空的整数数组,返回此数组中的第三个最大数字.如果不存 ...
- March 04th, 2018 Week 10th Sunday
Tomorrow never comes. 我生待明日,万事成蹉跎. Most of my past failures can be chalked up to the bad habit of pr ...
- Android Studio教程03-Activtiy生命周期的理解
目录 1. Activity 1.1. 安卓中的Activity定义和特性: 1.2. 注册Activity 1. Intent filters:设置默认开启的activity 1.3. Activi ...
- 转:Java中的String,StringBuilder,StringBuffer三者的区别
最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...