迭代器

'iterable' 可迭代的

内部含有__iter__方法的数据类型就是可迭代的 —— 可迭代协议

print(dir([]))
print(dir({}))
print(dir(5))
print('__iter__' in dir('abc')) # True
ret = 'abc'.__iter__()
print(ret)
'iterator' # 迭代器

迭代器可以理解为一个容器,我们从这个容器当中一个接着一个的把值取出来的过程就是迭代的过程
如何从迭代器中取值

print(ret.__next__())  # a
print(ret.__next__()) # b
print(ret.__next__()) # c
print(ret.__next__()) # StopIteration l = ['ha','hei','he']
lst_iter = l.__iter__()
print(lst_iter.__next__())
print(lst_iter.__next__())
print(lst_iter.__next__())

可迭代的 可迭代对象 python一切皆对象
迭代器

print(dir(l))
print(dir(lst_iter))
print(set(dir(lst_iter)) - set(dir(l))) # {'__next__', '__setstate__', '__length_hint__'}

lst_iter.__setstate__ # 设置从哪开始迭代
可迭代的必须含有__iter__方法 # 可迭代协议
迭代器比可迭代的多一个__next__方法
迭代器:包含__next__,__iter__方法的就是迭代器 # 迭代器协议
包含__next__方法的可迭代对象就是迭代器
迭代器是可迭代的的一部分
获得迭代器:可迭代的调用__iter__
使用迭代器:迭代器.__next__()

print('__iter__' in dir(lst_iter))
print('__next__' in dir(lst_iter))

如何判断一个变量是不是迭代器或者可迭代的

# print('__iter__' in dir(lst_iter))
# print('__next__' in dir(lst_iter))
from collections import Iterable
from collections import Iterator
print(isinstance('a',str))
print(isinstance([1,2,3,4],Iterable))
print(isinstance([1,2,3,4],Iterator))
print(isinstance(1,Iterable))
print(isinstance(1,Iterator))
print(isinstance(lst_iter,Iterator))

可迭代的:__iter__
迭代器:__iter__和__next__
迭代器和可迭代的关系:可迭代的包含迭代器
迭代器和可迭代的判断:两种方法

迭代器的工作原理
l_iter = [1, 2, 3, 4, 5].__iter__()
迭代器只是记录当前这个元素和下一个元素

print('__iter__' in dir(range(10)))
print('__next__' in dir(range(10)))
range_iter = range(10).__iter__()
print(range_iter.__next__())
print(range_iter.__next__())

迭代器的特点
惰性运算
从前到后一次去取值,过程不可逆,不可重复
节省内存

for item in [1,2,3]:
pass
# list_iter = [1,2,3].__iter__()
# list_iter.__next__()

用while循环模拟for循环的方式 —— for循环是了依赖迭代器的,且我们自己也可以仿照着写

l = [1,2,3,4,5]
l_iter = l.__iter__()
while True:
try:
print(l_iter.__next__())
except StopIteration: # 遇到StopIteration就break
break

for循环是让我们更简单的使用迭代器
用迭代器取值就不需要关心索引或者key的问题了

目前我们已知的可迭代的都是python提供给我们的
range()
文件f
enumerate()
在平时写代码的过程中,我们用for循环就够了

day13 迭代器的更多相关文章

  1. python 全栈开发,Day13(迭代器,生成器)

    一.迭代器 python 一切皆对象 能被for循环的对象就是可迭代对象 可迭代对象: str,list,tuple,dict,set,range 迭代器: f1文件句柄 dir打印该对象的所有操作方 ...

  2. Python—day13 迭代器、迭代器对象、for循环对象、生成器、枚举对象

    一.迭代器 1.迭代器概念: 器:包含了多个值的容器 迭代:循环反馈(一次从容器在取出一个值) 迭代器:从装有多个值的容器在一次取出一个值 ls=[3,5,7,1,9] 遍历:被遍历的对象必须是有序容 ...

  3. DAY13 迭代器与生成器

    一.迭代器 定义:器:包含了多个值的容器 迭代:循环反馈(一次从容器中取出一个值) 迭代器:从装有多个值的容器中一次取出一个值给外界 优点:不依赖索引,完成取值 缺点:不能计算长度,不能指定位取值(只 ...

  4. python学习 day13 迭代器,生成器,枚举对象

    一.复习 1.闭包:定义在函数内部的函数(被函数嵌套的函数) 2.装饰器:闭包的一个应用场景 -- 为一个函数添加新功能的工具 3.开放封闭原则:不能修改源代码,不能修改调用方式,但可以对外提供增加新 ...

  5. day13: 迭代器和生成器

    1,思考所有可以被for循环的:list,tuple,set,dict,range,enumerate,f,str,差不多了,为何这些数据类型可以被for循环呢? 2,一个标准的装饰器函数 from ...

  6. day13迭代器与生成器

    三个作业: # 1.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码 login_dic = {'alex':False} def ...

  7. python基础一 day13 迭代器

    # 双下方法# print([1].__add__([2]))# print([1]+[2]) # 迭代器# l = [1,2,3]# 索引# 循环 for# for i in l:# i## for ...

  8. day13. 迭代器与高阶函数

    一.迭代器 """ 能被next调用,并不断返回下一个值的对象,叫做迭代器(对象) 概念: 迭代器指的是迭代取值的工具,迭代是一个重复的过程,每次重复都是基于上一次的结果 ...

  9. day13,day14

    day13 迭代器 什么是迭代器? 迭代:是一个重复的过程,每一次重复,都是基于上一次的结果而进行的 器:迭代取值的工具 为何要用迭代器? 迭代器提供了一种通用的不依赖于索引的迭代取值方式 如何用迭代 ...

随机推荐

  1. 第二百四十二节,Bootstrap列表组面板和嵌入组件

    Bootstrap列表组面板和嵌入组件 学习要点: 1.列表组组件 2.面板组件 3.响应式嵌入组件 本节课我们主要学习一下 Bootstrap 的三个组件功能:列表组组件.面板组件. 响应 式嵌入组 ...

  2. numpy和TensorFlow的函数

    pycharm  jupyter notebook 环境配置

  3. Jquery实现Bootstrap树形列表

    http://bookshadow.com/weblog/2014/05/17/jquery-bootstrap-tree-list/

  4. c++新特性---引用变量

    一.定义 引用变量是已定义变量的别名,如将ra设置为a的引用变量,则可以使用ra和a交替使用该变量. 表示: int a = 5; int & ra = a; 其中&不是地址运算符,而 ...

  5. vmware 虚拟机下 ubuntu 与主机共享锐捷

    一直以来.想要学习 linux ,在 vm 虚拟机下安装了 ubuntu 系统. 可是这个系统并不能上网.原因就是 vm 虚拟机的虚拟网卡会和锐捷冲突.锐捷会检測到多网卡,断开网络,所以不得不禁用 v ...

  6. Qt 配置文件QSettings读取以及中文问题

    QSettings settings("xxxx.ini",QSettings::IniFormat);settings.setIniCodec(QTextCodec::codec ...

  7. PAT Advance 1020

    题目: 1020. Tree Traversals (25) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue S ...

  8. Eclipse获取签名证书的SHA1

    签名后的获取方式 :http://jingyan.baidu.com/article/3ea51489da3bc252e71bba59.html 未签名的获取方式:http://www.th7.cn/ ...

  9. Android中Bitmap、Drawable、byte[]转换

    public byte[] getBitmapByte(Bitmap bitmap){ ByteArrayOutputStream out = new ByteArrayOutputStream(); ...

  10. CommonJS和AMD/CMD

    JS中的模块规范(CommonJS,AMD,CMD) 一,CommonJS NodeJS是CommonJS规范的实现,webpack也是以CommonJS的形式来书写. 在浏览器环境下,没有模块也不是 ...