23_迭代器、模拟For循环
一、可迭代对象 和 迭代器
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循环的更多相关文章
- 迭代器模拟for循环
s = 'wgugq wgugfgfqwihqwohd' it = s.__iter__() # 生成一个迭代器 while 1: try: # 尝试 el = it.__next__() # 下一个 ...
- Python之collections序列迭代器下标式循环冒泡算法等
练习题 元素分类 有如下值集合[11,22,33,44,55,66,77,88,99]将所有大于66的数作为一个列表放在字典的key为k1的value小于等于66的为k2的value {'k1':[7 ...
- mssql sqlserver 模拟for循环的写法
转自:http://www.maomao365.com/?p=6567 摘要: 下文讲述sql脚本模拟for循环的写法,如下所示: /* for样例 for('初始值','条件','执行后自增') 通 ...
- 深入浅出ES6(二):迭代器和for-of循环
作者 Jason Orendorff github主页 https://github.com/jorendorff 我们如何遍历数组中的元素?20年前JavaScript刚萌生时,你可能这样实现数 ...
- 用fluent模拟内循环床气化燃烧(调试过程记录)
模拟对象为文献Combined gasification of coal and biomass in internal circulating fluidized bed[1]中的内循环气化炉.[1]h ...
- es6学习笔记一:迭代器和for-of循环
我们如何遍历一个数组呢?在20年前,我们是这样遍历一个数组的: var myArr = []; for (var i = 0; i < arr.length; i++) { console.lo ...
- Python Day 14 迭代器、for循环原理、枚举、生成器
阅读内容 内容回顾 带参装饰器和wraps用法 迭代器知识引入 可迭代对象 迭代器对象 for循环迭代器 枚举对象 生成器 ##内容回顾 函数的嵌套定义:在函数内部定义另一 ...
- JavaSE Collections类 , Iterator迭代器 , 增强for循环
Collections 它是集合的工具类,为集合体系扩展了一些其他的方法.类中都是静态的方法,可以使用类名直接调用. 可变参数 在JDK1.5之后,如果我们定义一个方法需要接受多个参数,并且多个参数类 ...
- Python练习-迭代器-模拟cat|grep文件
代码如下: # 编辑者:闫龙 def grep(FindWhat): f=open("a.txt","r",encoding="utf8") ...
随机推荐
- redis4.0 集群,jedis客户端连接配置
使用jedis 2.9.0连接,异常信息: redis.clients.jedis.exceptions.JedisDataException: ERR Client sent AUTH, but n ...
- 排序算法的实现(C/C++实现)
存档: #include <iostream> #include <stdlib.h> #include <sort.h> #define maxsize 20 u ...
- POJ 3154 Graveyard【多解,数论,贪心】
Graveyard Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 1707 Accepted: 860 Specia ...
- Victor and World(spfa+状态压缩dp)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5418 Victor and World Time Limit: 4000/2000 MS (Java/ ...
- 网络爬虫技术Jsoup——爬到一切你想要的(转)
转自:http://blog.csdn.net/ccg_201216323/article/details/53576654 本文由我的微信公众号(bruce常)原创首发, 并同步发表到csdn博客, ...
- GDI绘制时钟效果,与系统时间保持同步,基于Winform
2018年工作之余,想起来捡起GDI方面的技术,特意在RichCodeBox项目中做了两个示例程序,其中一个就是时钟效果,纯C#开发.这个CSharpQuartz是今天上午抽出一些时间,编写的,算是偷 ...
- Linux下安装PostgreSQL 转载linux社区
Linux下安装PostgreSQL [日期:2016-12-25] 来源:Linux社区 作者:xiaojian [字体:大 中 小] 在Linux下安装PostgreSQL有二进制格式安装和 ...
- NYOJ 2356 哈希计划(模拟)
题目链接: http://acm.nyist.me/JudgeOnline/problem.php?id=2356 题目描述 众所周知,LLM的算法之所以菜,就是因为成天打游戏,最近LLM突然想玩&l ...
- 用于 C♯ 图像识别的轮廓分析技术
用于 C♯ 图像识别的轮廓分析技术 供稿:Conmajia 标题:Contour Analysis for Image Recognition in C# 作者:Pavel Torgashov 此中文 ...
- Visual SVN Server启动失败0x8007042a错误
载. 今天在程序VisualSVNServer界面中启动服务时,报错如下: VisualSVNServerServer service failed to start:服务已返回特定的服务 ...