迭代器

'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. ZoneDateTime 转换Date

    final ZonedDateTime now = ZonedDateTime.now(); //当前时间final ZonedDateTime todayZero = now.truncatedTo ...

  2. 剖析top命令显示的VIRT RES SHR值

    http://yalung929.blog.163.com/blog/static/203898225201212981731971/ http://www.fuzhijie.me/?p=741 引  ...

  3. RTP时间戳

    http://xingyunbaijunwei.blog.163.com/blog/static/7653806720126121014111/ ——————————————————————————— ...

  4. 宝宝书 & 网站

    1. 网站 妈妈帮 宝宝树 2. 图书推荐 育儿百科 育儿经 中国儿童智力方程 聪明宝宝营养食谱1001例

  5. 【BZOJ】2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛(树形dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2060 裸的树形dp d[x][1]表示访问x的数量,d[x][0]表示不访问x的数量 d[x][1] ...

  6. 【BZOJ】2021: [Usaco2010 Jan]Cheese Towers(dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2021 噗,自己太弱想不到. 原来是2次背包. 由于只要有一个大于k的高度的,而且这个必须放在最顶,那 ...

  7. 一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10 (转)

    x-ua-compatible 用来指定IE浏览器解析编译页面的model x-ua-compatible 头标签大小写不敏感,必须用在 head 中,必须在除 title 外的其他 meta 之前使 ...

  8. 【python】计算器

    from __future__ import division import sys from math import * from PyQt4.QtCore import * from PyQt4. ...

  9. 最基础的PHP分类查询程序

    最初级的PHP分类查询程序 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...

  10. SQL Server Profiler的简单使用(监控mssql)

    SQL Server Profiler可以检测在数据上执行的语句,特别是有的项目不直接使用sql语句,直接使用ORM框架的系统处理数据库的项目,在调试sql语句时,给了很大的帮助. 之前写了使用SQL ...