迭代器 -> 固定的思路. for循环
一个数据类型中包含了__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循环的更多相关文章
- (BUG记录)使用迭代器安全的删除处于循环下集合中的元素
今日在写一个功能时,需要从MQ拿取数据集合调用对端系统进行批量处理,为了幂等支持,在循环内部如果不满足调用条件就直接从集合中移除. 以上是一个典型的循环集合内删除的场景任务,工作一年第一次遇到这个场景 ...
- python—迭代器,生成器与for循环机制
一:什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代器中的下一项,要么就引起一个stoplteration异常,以终止协议(只能往后走不能往前) 2.可迭代对 ...
- day 11 前方高能-迭代器
第一类对象 -----函数名 == 变量名 函数对象可以像变量一样进行赋值 还可以作为列表的元素进行使用 可以作为返回值返回 def wrapper(): def inner(): ...
- 巨蟒python全栈开发-第11天 第一类对象 闭包 迭代器
一.今日主要内容总览(重点) 1.第一类对象->函数名=>变量名 (1)函数对象可以像变量一样进行赋值 (2)还可以作为列表的元素进行使用 (3)还可以作为返回值返回 (4)还可以作为参数 ...
- python简单入门
一. 初识python. 1. 认识计算机 CPU(大脑) 3GHZ + 内存(DDR4) + 主板 + 电源(心脏)+ 显示器 + 键盘 +鼠标+ 显卡 + 硬盘 80MB/s 操作系统 windo ...
- python之路--第一类对象,函数名,变量名
一 . 第一类对象 函数对象可以像变量一样进行赋值 , 还可以作为列表的元素进行使用 可以作为返回值返回 , 可以作为参数进行传递 def func(): def people(): print('金 ...
- python--第一类对象,函数名,变量名
一 . 第一类对象 函数对象可以像变量一样进行赋值 , 还可以作为列表的元素进行使用 可以作为返回值返回 , 可以作为参数进行传递 def func(): def people(): print('金 ...
- day11 第一类对象 闭包 迭代器
今日主要内容: 1 . 第一类对象 -->函数名--> 变量名 2. 闭包 -->函数的嵌套 3. 迭代器 --> 固定的思想 for 循环 第一类对象 : 函数对象介意向变 ...
- 18_集合框架_第18天_集合、Iterator迭代器、增强for循环 、泛型_讲义
今日内容介绍 1.集合 2.Iterator迭代器 3.增强for循环 4.泛型 01集合使用的回顾 *A:集合使用的回顾 *a.ArrayList集合存储5个int类型元素 public stati ...
随机推荐
- java 同步代码块与同步方法
同步代码块 synchronized (obj) { // 代码块 } obj 为同步监视器,以上代码的含义为:线程开始执行同步代码块(中的代码)之前,必须先获得对同步监视器的锁定. 代码块中的代码是 ...
- 【java】Hello World
class Demo { //程序的主入口,能保证类的独立运行 public static void main(String[] args) { System.out.println("He ...
- redmine一键安装(项目管理、Bug管理、任务跟踪、代码管理、日报等等)
1,下载一键安装包(64位系统) https://bitnami.com/stack/redmine 2,帮助文档(安装引导) http://www.360doc.com/content/15/033 ...
- Windows Azure Web Site (19) Azure Web App链接到VSTS
<Windows Azure Platform 系列文章目录> 之前遇到一个问题,客户在海外使用 我参考了一下国内Azure China的文档:https://school.azure.c ...
- [蓝桥杯]ALGO-79.算法训练_删除数组零元素
从键盘读入n个整数放入数组中,编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动.注意,CompactIntegers函数需要接受数组及其元素个数作为参数,函数 ...
- [蓝桥杯]ALGO-48.算法训练_关联矩阵
题目描述: 问题描述 有一个n个结点m条边的有向图,请输出他的关联矩阵. 输入格式 第一行两个整数n.m,表示图中结点和边的数目.n<=,m<=. 接下来m行,每行两个整数a.b,表示图中 ...
- Linux bash笔记
关于bash脚本,一般开头都加#!/bin/bash,表示以bash来作为脚本解释器:如果不加的话,就会默认当前用户登陆的shell为脚本解释器(很多情况下为sh,sh与bash不同,有可能导致脚本无 ...
- mysql查询优化之二:查询优化器的局限性
在<mysql查询优化之一:mysql查询优化常用方式>一文中列出了一些优化器常用的优化手段.查询优化器在提供这些特性的同时,也存在一定的局限性,这些局限性往往会随着MySQL版本的升级而 ...
- Java-Runoob-高级教程-实例-数组:16. Java 实例 - 数组并集
ylbtech-Java-Runoob-高级教程-实例-数组:16. Java 实例 - 数组并集 1.返回顶部 1. Java 实例 - 数组并集 Java 实例 以下实例演示了如何使用 unio ...
- k8s服务发现和负载均衡(转)
原文 http://m635674608.iteye.com/blog/2360095 kubernetes中如何发现服务 如何发现pod提供的服务 如何使用kube-dns发现服务 servic ...