一个数据类型中包含了__iter__函数表示这个数据是可迭代的
dir(数据): 返回这个数据可以执行的所有操作

判断迭代器和可迭代对象的方案(野路子)
__iter__ 可迭代的
__iter__ __next__ 迭代器

判断迭代器和可迭代对象的方案(官方)
from collections import Iterable, Iterator
isinstance(对象, Iterable) 是否是可迭代的
isinstance(对象, Iterator) 是否是迭代器

模拟for循环
lst= []
# 拿迭代器
it = lst.__iter__()
while 1:
try:
it.__next__()
except StopIteration:
break

特征:
1. 省内存(生成器)
2. 惰性机制
3. 只能向前. 不能后退

作用:统一了各种数据类型的遍历

# s = "今天下午考试. 你们还要睡觉吗?"
#
# for c in s: # 字符串是一个可迭代对象
# print(c) # for c in "哼哼哈哈":
# print(c)
#
# for i in 123: # 'int' object is not iterable
# print(i) # dir() 可以帮我们查看xxx数据能够执行的操作
# print(dir(str)) # __iter__
# print(dir(int)) # 没有__iter__
# print(dir(list)) # 有__iter__
# print(dir(dict)) # 有__iter__
# print(dir(bool)) # 没有__iter__
# for i in True: # 'bool' object is not iterable
# print(i) # print(dir(range))
# f = open("呵呵", mode="r", encoding="utf-8")
# print(dir(f)) # 共性:所有带有__iter__的东西都可以进行for循环, 带有__iter__的东西就是可迭代对象 # lst = ["贾樟柯", "李安", "杨德昌", "王家卫"]
#
# # 1. 只能向下执行, 不能反复
# # 2. 结束的时候会给我们扔出来一个错误 StopIteration
# # 3. 整合所有的数据类型进行遍历(int,bool除外)
#
# # print("__iter__" in dir(lst))
# it = lst.__iter__() # 拿到的是迭代器 <list_iterator object at 0x0000000001DCC160>
#
# print(it.__next__()) # 下一个
# print(it.__next__()) # 下一个
# print(it.__next__()) # 下一个
# print(it.__next__()) # 下一个
# # print(it.__next__()) # 下一个 # StopIteration 停止迭代
# # 想回去
# it = lst.__iter__() # 只能重新获取迭代器 # s = {"张无忌", "贾樟柯", "宝宝", "风扇哥", "门神"}
# it = s.__iter__()
# print(it.__next__())
# print(it.__next__())
# print(it.__next__())
# print(it.__next__())
# print(it.__next__()) # lst = ["海尔兄弟", "阿童木", "葫芦娃", "舒克贝塔", "大风车"]
# # 模拟for循环 for el in lst:
# it = lst.__iter__() # 获取到迭代器0
# while 1: # 循环
# try: # 尝试
# el = it.__next__() # 那数据
# print(el)
# except StopIteration: # 出了错误, 意味着数据拿完了
# break # 结束循环 # 官方通过代码判断是否是迭代器
# 借助于两个模块 Iterator迭代器, Iterable可迭代的
# from collections import Iterable, Iterator
#
# lst = [1,2,3]
# # print(lst.__next__())
#
# print(isinstance(lst, Iterable)) # xxx是否是xxx类型的. True
# print(isinstance(lst, Iterator)) # False
#
# it = lst.__iter__() # 迭代器一定可迭代, 可迭代的东西不一定是迭代器
#
# print(isinstance(it, Iterable)) # xxx是否是xxx类型的. True
# print(isinstance(it, Iterator)) # True
#
# for el in it:
# print(el)

  

迭代器 -> 固定的思路. for循环的更多相关文章

  1. (BUG记录)使用迭代器安全的删除处于循环下集合中的元素

    今日在写一个功能时,需要从MQ拿取数据集合调用对端系统进行批量处理,为了幂等支持,在循环内部如果不满足调用条件就直接从集合中移除. 以上是一个典型的循环集合内删除的场景任务,工作一年第一次遇到这个场景 ...

  2. python—迭代器,生成器与for循环机制

    一:什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代器中的下一项,要么就引起一个stoplteration异常,以终止协议(只能往后走不能往前) 2.可迭代对 ...

  3. day 11 前方高能-迭代器

    第一类对象 -----函数名  == 变量名 函数对象可以像变量一样进行赋值 还可以作为列表的元素进行使用 可以作为返回值返回 def wrapper():     def inner():      ...

  4. 巨蟒python全栈开发-第11天 第一类对象 闭包 迭代器

    一.今日主要内容总览(重点) 1.第一类对象->函数名=>变量名 (1)函数对象可以像变量一样进行赋值 (2)还可以作为列表的元素进行使用 (3)还可以作为返回值返回 (4)还可以作为参数 ...

  5. python简单入门

    一. 初识python. 1. 认识计算机 CPU(大脑) 3GHZ + 内存(DDR4) + 主板 + 电源(心脏)+ 显示器 + 键盘 +鼠标+ 显卡 + 硬盘 80MB/s 操作系统 windo ...

  6. python之路--第一类对象,函数名,变量名

    一 . 第一类对象 函数对象可以像变量一样进行赋值 , 还可以作为列表的元素进行使用 可以作为返回值返回 , 可以作为参数进行传递 def func(): def people(): print('金 ...

  7. python--第一类对象,函数名,变量名

    一 . 第一类对象 函数对象可以像变量一样进行赋值 , 还可以作为列表的元素进行使用 可以作为返回值返回 , 可以作为参数进行传递 def func(): def people(): print('金 ...

  8. day11 第一类对象 闭包 迭代器

    今日主要内容: 1 . 第一类对象 -->函数名--> 变量名 2. 闭包 -->函数的嵌套 3. 迭代器 --> 固定的思想 for 循环 第一类对象  : 函数对象介意向变 ...

  9. 18_集合框架_第18天_集合、Iterator迭代器、增强for循环 、泛型_讲义

    今日内容介绍 1.集合 2.Iterator迭代器 3.增强for循环 4.泛型 01集合使用的回顾 *A:集合使用的回顾 *a.ArrayList集合存储5个int类型元素 public stati ...

随机推荐

  1. 3、Sql-Ora-01033:oracle initialization or shutdown in progress

  2. MapReduce案例:统计共同好友+订单表多表合并+求每个订单中最贵的商品

    案例三: 统计共同好友 任务需求: 如下的文本, A:B,C,D,F,E,OB:A,C,E,KC:F,A,D,ID:A,E,F,LE:B,C,D,M,LF:A,B,C,D,E,O,MG:A,C,D,E ...

  3. C#:匿名类型

    匿名类型和var关键字是Visual C# 3.0提供的一个新特性,var是隐式类型而并不是类型javascript中的var. var user = new { Id = 1, Name = &qu ...

  4. php exec返回状态为1

    之前在用到php exec 时 总是保存,返回状态1,那这时怎么排查呢 exec('ls 2>&1', $output, $return_val); print_r($output); ...

  5. Windows Azure Virtual Machine (36) 扩展Azure ARM VM的磁盘大小

    <Windows Azure Platform 系列文章目录> 在默认情况下,Azure ARM VM的操作系统磁盘(OS Disk),容量为: (1)Windows VM OS Disk ...

  6. 为什么.net 4.6.1装了却没看到

    今天在做SignalR网站,需要在发布到的云服务器安装.net4.6.1 从网上下载了安装包,安装完之后,到Windows文件夹的 Microsoft.NET文件夹中却找不到4.6.1的文件夹. 云服 ...

  7. 黄聪:微信小程序(应用号)资源汇总整理(转)

    微信小应用资源汇总整理 开源项目 WeApp - 微信小程序版的微信 wechat-weapp-redux-todos - 微信小程序集成Redux实现的Todo list wechat-weapp- ...

  8. Maven打包将所有的依赖都打入

    附上pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...

  9. bzoj4812: [Ynoi2017]由乃打扑克

    由于查询的是树链的并的信息,同时信息不能高效合并,只能考虑用bitset维护,小范围暴力预处理以便从bitset算出答案 对树分块,保证每块是连通的且直径较小,对分出的块缩点建新树,在新树上建树上ST ...

  10. Hadoop概念学习系列之pagerank的友情链接(三十八)

    博主我带大家,弄清楚一个事实. 比如,搜狐主页下方,有很多友情链接,这些友情链接,那可是一个位置就是多少钱. 有人说,一个位置多少钱,这又没有给我带来点击量,那我干嘛还每年花上几十万,给搜狐,就那么放 ...