一、可迭代对象 和 迭代器

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. django笔记整理

    Django复习: MTV模型: manager启动服务→urls找到路径→(找到views视图函数或者做路由分发)→视图函数处理相关逻辑,返回一个模板或者是字符串: ---------------- ...

  2. python函数定义

    刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解.其实只要把函数参数定义搞清楚了,就不难理解了. 先说说函 ...

  3. c++(选择排序)

    选择排序是和冒泡排序差不多的一种排序.和冒泡排序交换相连数据不一样的是,选择排序只有在确定了最小的数据之后,才会发生交换.怎么交换呢?我们可以以下面一组数据作为测试: 2, 1, 5, 4, 9 第一 ...

  4. jquery1.8 在IE8 下面报错:对象不支持此属性或方法 return b.getAttribute("id")===a

    jquery1.8 在IE8 下面报错: 对象不支持此属性或方法 调试发现是下面这一行报错: 在IE8下面报错,在chrome和firefox都是好的. 实在找不到原因,最后把源码改成下面这样: 没有 ...

  5. 修改nopCommerce中的实体

                               对已有实体增加一个属性(对Category增加一个SomeNewProperty)   最近在研究nopcommerce,这里是对官网上文档的学习 ...

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

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

  7. api接口token验证

    接口特点汇总: 1.因为是非开放性的,所以所有的接口都是封闭的,只对公司内部的产品有效: 2.因为是非开放性的,所以OAuth那套协议是行不通的,因为没有中间用户的授权过程: 3.有点接口需要用户登录 ...

  8. str_repeat() 函数把字符串重复指定的次数。

    str_repeat() 函数把字符串重复指定的次数. str_repeat(string,repeat) 参数 描述 string 必需.规定要重复的字符串. repeat 必需.规定字符串将被重复 ...

  9. php错误 分析

    ---------------------------------------------------------------------------------------------------- ...

  10. Cannot complete the install because one or more required items could not be found

    弄了一天的subclipse也没装上,郁闷~~~~~~~~ 无论采用本地安装还是站点安装都不行,在安装的时候显示错误: Cannot complete the install because one  ...