一、可迭代对象 和 迭代器

1.可迭代对象和迭代器

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

迭代器:可以被next()函数调用并不断返回下一个值的对象称为迭代器,Iterator.

2.判断某个对象是否是可迭代对象

dir() 会打印出对象的所有内置属性和方法,然后判断所有的属性和方法中是否存在'__iter__'.

 l = [1,2,3,4]
print(dir(l)) #他会把列表的所有方法和属性打印出来.返回的是一个列表
print('__iter__' in dir(l)) #True 如果对象包含__iter__ ,就表明是一个可迭代对象

isinstance() 可以判断一个对象是否是可迭代对象Iterable

 from collections import Iterable

 l = [1,2,3,4]
print(isinstance(l,Iterable)) #如果返回True ,表明对象是可迭代对象

3.判断某个对象是否是迭代器

dir() : 判断对象的所有内置方法和属性中是否包含'__next__'.

 print('__next__' in dir([]))#False 列表不是迭代器
print('__next__' in dir(''))#False 字符串不是迭代器
print('__next__' in dir({}))#False 字典不是迭代器

isinstance() :可以判断对象是否是迭代器。

 print(isinstance('',Iterator)) #False
print(isinstance([],Iterator)) #False
print(isinstance({},Iterator)) #False
print(isinstance(iter([]),Iterator)) #True
print(isinstance(iter(''),Iterator)) #True
print(isinstance(iter({}),Iterator)) #True

4.可迭代对象   转化成  迭代器

生成器都是Iterator,但list、str、dict、虽然都是Iterable,却不是Iterator。

把list、str、dict等Iterable转换成Iterator可以使用'__iter__() '或 iter()函数:

 print(isinstance(''.__iter__(),Iterator)) #True
print(isinstance([].__iter__(),Iterator)) #True
print(isinstance({}.__iter__(),Iterator)) #True
print(isinstance(iter([]),Iterator)) #True
print(isinstance(iter(''),Iterator)) #True
print(isinstance(iter({}),Iterator)) #True

5.迭代器的特点

1.节省内存
2.迭代器惰性机制
3.迭代器不能反复,一直向下执行

6.文件句柄就是一个迭代器

我们通过open()方法可以获得一个文件句柄,通过文件句柄我们可以操作文件。文件句柄就是一个迭代器。

 #文件句柄是一个迭代器
with open('text.txt',encoding='utf-8') as f_read:
print(isinstance(f_read,Iterator)) #True
pass

二、For循环的机制 - 模拟For循环

for循环是一种迭代循环机制,在内部调用next(),并捕获异常(StopIteration ),终止循环的操作

 #模仿 for 循环

 L = [1,2,3,4]

 #for循环实现
for i in L:
#print(i) 打印 1 2 3 4
pass L = L.__iter__() #L 列表从 可迭代对象转换成了迭代器
while True:
try:
print(L.__next__()) # 每次打印出 L 的元素
except StopIteration: #迭代器next()在所有元素取出完后,引发StopIteration异常
break #终止函数

23_迭代器、模拟For循环的更多相关文章

  1. 迭代器模拟for循环

    s = 'wgugq wgugfgfqwihqwohd' it = s.__iter__() # 生成一个迭代器 while 1: try: # 尝试 el = it.__next__() # 下一个 ...

  2. Python之collections序列迭代器下标式循环冒泡算法等

    练习题 元素分类 有如下值集合[11,22,33,44,55,66,77,88,99]将所有大于66的数作为一个列表放在字典的key为k1的value小于等于66的为k2的value {'k1':[7 ...

  3. mssql sqlserver 模拟for循环的写法

    转自:http://www.maomao365.com/?p=6567 摘要: 下文讲述sql脚本模拟for循环的写法,如下所示: /* for样例 for('初始值','条件','执行后自增') 通 ...

  4. 深入浅出ES6(二):迭代器和for-of循环

    作者 Jason Orendorff  github主页  https://github.com/jorendorff 我们如何遍历数组中的元素?20年前JavaScript刚萌生时,你可能这样实现数 ...

  5. 用fluent模拟内循环床气化燃烧(调试过程记录)

    模拟对象为文献Combined gasification of coal and biomass in internal circulating fluidized bed[1]中的内循环气化炉.[1]h ...

  6. es6学习笔记一:迭代器和for-of循环

    我们如何遍历一个数组呢?在20年前,我们是这样遍历一个数组的: var myArr = []; for (var i = 0; i < arr.length; i++) { console.lo ...

  7. Python Day 14 迭代器、for循环原理、枚举、生成器

    阅读内容 内容回顾   带参装饰器和wraps用法   迭代器知识引入   可迭代对象   迭代器对象   for循环迭代器   枚举对象   生成器 ##内容回顾 函数的嵌套定义:在函数内部定义另一 ...

  8. JavaSE Collections类 , Iterator迭代器 , 增强for循环

    Collections 它是集合的工具类,为集合体系扩展了一些其他的方法.类中都是静态的方法,可以使用类名直接调用. 可变参数 在JDK1.5之后,如果我们定义一个方法需要接受多个参数,并且多个参数类 ...

  9. Python练习-迭代器-模拟cat|grep文件

    代码如下: # 编辑者:闫龙 def grep(FindWhat): f=open("a.txt","r",encoding="utf8") ...

随机推荐

  1. XML(一)XML大揭秘

    前言 每天都要学习很多新的知识,比你厉害的程序员比你还努力,那你混的下这口饭吗?所以不抱怨,坚持!接下来给大家分享的是xml.可能很多做开发的都遇到过xml, 比如maven,各种框架的配置文件都有, ...

  2. BZOJ 1207: [HNOI2004]打鼹鼠【妥妥的n^2爆搜,dp】

    1207: [HNOI2004]打鼹鼠 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3259  Solved: 1564[Submit][Statu ...

  3. [bzoj1705] [Usaco2007 Nov]Telephone Wire 架设电话线

    正常DP.. f[i][j]表示前i个电线杆,把第i个电线杆高度改为j的最少总费用.设原来电线杆高度为h[] f[i][j]=min{ f[i-1][k]+C*|j-k|+(j-h[i])^2,(k& ...

  4. SpringMVC框架学习笔记(5)——数据处理

    1.提交数据的处理 a)提交的域名称和参数名称一致 http://localhost:8080/foward/hello.do?name=zhangsan 处理方法 @RequestMapping(v ...

  5. 调用webService的几种方式

    转自:http://blog.csdn.net/u011165335/article/details/51345224 一.概览 方式1: HttpClient:可以用来调用webservie服务,也 ...

  6. CSS中的定位与浮动

    CSS中的定位与浮动 本文主要讲述CSS中的三种定位样式static.relative和absolute的区别以及浮动元素的特征. 定位样式 CSS中定位样式position的取值有三个,默认值:st ...

  7. POJ 3278 Catch That Cow(模板——BFS)

    题目链接:http://poj.org/problem?id=3278 Description Farmer John has been informed of the location of a f ...

  8. GBK,UTF8是什么?有什么区别,做网站选择哪种好?

    GBK包含全部中文字符: UTF-8则包含全世界所有国家需要用到的字符. GBK是在国家标准GB2312基础上扩容后兼容GB2312的标准(好像还不是国家标准) UTF-8编码的文字可以在各国各种支持 ...

  9. jquery ajax 请求中多出现一次OPTIONS请求及其解决办法

    http://www.tangshuang.net/2271.html 在上一篇<服务端php解决jquery ajax跨域请求restful api问题及实践>中,我简单介绍了如何通过服 ...

  10. 4种常用扒站工具(webzip、ha_TeleportPro、Offline Explorer、wget)

    许多开始做lead,EMU的新手,需要一个英文网站,找人定制费用太贵自己又不会技术的话,可以通过扒站来获得英文站,今天给大家介绍几种扒站工具: 1.HA_TeleportPro: Teleport P ...