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") ...
随机推荐
- VueI18n插件的简单应用于国际化
作为一个前端小白,刚刚接触学习Vue.js框架结合Element-ui组件开发项目.由于最近需要实现国际化功能,在看element-ui的开发文档时,只有简单的引入没有应用实例,对于我这种小白不能ge ...
- 手机termux上安装msfconsole
大家可能因为手机没有root而不能通过deploy安装kali 我们使用termux来安装渗透工具 1.下载并安装Termux,更新软件源并升级软件包 apt update apt upgrade a ...
- hdu_1251统计难题(字典树Trie)
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submi ...
- hdu_2604Queuing(快速幂矩阵)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2604 Queuing Time Limit: 10000/5000 MS (Java/Others) ...
- cin与cout详解
输入和输出并不是C++语言中的正式组成成分。C和C++本身都没有为输入和输出提供专门的语句结构。输入输出不是由C++本身定义的,而是在编译系统提供的I/O库中定义的。C++的输出和输入是用" ...
- Linux学习之XShell与虚拟机的连接
最近在慕课网上学习Linux视频,记录一下解决问题的方法和过程. 实验软件环境: 虚拟机软件Vmware Workstation10.0.虚拟机系统CentOS 6.3(32位).XShell 5.0 ...
- 微信小程序实现滚动加载更多
1.需要用到的组件和api scroll-view(可滚动视图区域) wx.showToast(OBJECT)显示消息提示窗----显示loading小菊花用的 2.需要用到的属性 3.scrol-v ...
- jdbc、Mybatis插入数据主键回显的实现方法
插入数据的时候,往往需要获取主键值.但是有时候主键是自增长的那么,就不太适用手动添加主键值了,此时需要一种可以回显主键参数的方法, 下面以jdbc.mybatis的实现举例 此时使用的是jdbc的话或 ...
- PHP defined() 函数
定义和用法 defined() 函数检查某常量是否存在. 若常量存在,则返回 true,否则返回 false. 语法 defined(name) 参数 描述 name 必需.规定要检查的常量的名称. ...
- [机器学习]模型评价参数,准确率,召回率,F1-score
很久很久以前,我还是有个建筑梦的大二少年,有一天,讲图的老师看了眼我的设计图,说:"我觉得你这个设计做得很紧张".当时我就崩溃,对紧张不紧张这样的评价标准理解无能.多年后我终于明白 ...