[oldboy-django][5python基础][高级特性]Iterator迭代器
# 区分可迭代对象iterable, 迭代器iterator, 生成器generator
a. iterable
可直接用for循环的对象,都称为可迭代对象,
from collections import Iterable
使用isinstance(a, Iterable)判断a对象是否为可迭代对象 因此,list, dict, str都是iterable
b. iterator
凡是可作用于Next()函数的对象,都是迭代器类型,表示一个惰性计算的序列
记住迭代器是有状态的,用过一轮之后,就不要反复使用了
c. generator
生成器也是迭代器, 但迭代器不是生成器。
生成器一般用于:当函数需要返回一个序列,这个时候最好将函数改造成generator,
这样做会比返回一个列表更省内存 d. iterator 和iterable区别
迭代器是惰性的,用多少生产多少;可迭代对象是一下全部返回,不管用到用不到.
集合数据类型如list、dict、str等是Iterable但不是Iterator,
不过可以通过iter()函数获得一个Iterator对象。 在python中迭代器对象是一个数据流, 数据流是有序的但是不能提前知道它的长度,
只能不断通过Next计算下一个数据,所以迭代器是惰性的。 e. 如何将List,dict, str变成迭代器
使用iter(list)方法
from collections import Iterator
l = [1,2,3]
s = iter(l)
print(isinstance(s, Iterator)) # python中for循环机制 -- 迭代器协议
- 迭代器协议(循环原理)
python在for循环中遍历某种容器的内容时,比如for x in foo, python实际上会先调用iter(foo)
将foo对象转成迭代器。
a. 如果foo是迭代器,则会调用foo.__iter__方法,该方法返回foo本身.
b. 如果foo是可迭代对象,则会生成一个迭代器 然后后for循环中, 会调用内置的next方法(注意这个方法不是迭代器的方法),
next方法会调用迭代器本身的__next__方法,直到元素耗尽产生StopIteration异常break出循环 for x in [1,2,3,4]:
print(x) 等效于:
it = iter([1,2,3,4])
while True:
try:
x = next(it)
print(x)
except StopIteration as e:
break # 文件的read和xreadline区别
read会读取文件所有内容到内存,占空间
xreadline只有在循环的时候,才获取 自己定义一个读文件的迭代器容器
def NReadlines():
with open('log','r') as f:
while True:
line = f.next()
if line:
yield line
else:
return for i in NReadlines():
print i
[oldboy-django][5python基础][高级特性]Iterator迭代器的更多相关文章
- [oldboy-django][5python基础][高级特性]generator生成器
# 生成器基础 - 定义 在循环的时候不断推算下一个元素的值,而不是一下子创建空间存储所有元素,这样节省空间. 并且在适当的条件结束循环,这种一边循环一边计算的机制,称为generator生成器 - ...
- python基础——高级特性
1.切片 切片: >>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] >>> L[:3] ['Michael ...
- Python学习札记(十九) 高级特性5 迭代器
参考:迭代器 Note 1.可用于for循环的对象有两类:(1)集合数据类型:list tuple dict str set (2)Generator:生成器和含yield语句的函数.这些可以直接作用 ...
- Python高级特性:迭代器和生成器
在Python中,很多对象都是可以通过for语句来直接遍历的,例如list.string.dict等等,这些对象都可以被称为可迭代对象.至于说哪些对象是可以被迭代访问的,就要了解一下迭代器相关的知识了 ...
- Python高级特性:迭代器和生成器 -转
在Python中,很多对象都是可以通过for语句来直接遍历的,例如list.string.dict等等,这些对象都可以被称为可迭代对象.至于说哪些对象是可以被迭代访问的,就要了解一下迭代器相关的知识了 ...
- Redis基础用法、高级特性与性能调优以及缓存穿透等分析
一.Redis介绍 Redis是一个开源的,基于内存的结构化数据存储媒介,可以作为数据库.缓存服务或消息服务使用.Redis支持多种数据结构,包括字符串.哈希表.链表.集合.有序集合.位图.Hype ...
- Python高级特性(切片,迭代,列表生成式,生成器,迭代器)
掌握了Python的数据类型.语句和函数,基本上就可以编写出很多有用的程序了. 比如构造一个1, 3, 5, 7, ..., 99的列表,可以通过循环实现: L = [] n = 1 while n ...
- python的高级特性:切片,迭代,列表生成式,生成器,迭代器
python的高级特性:切片,迭代,列表生成式,生成器,迭代器 #演示切片 k="abcdefghijklmnopqrstuvwxyz" #取前5个元素 k[0:5] k[:5] ...
- Redis基础、高级特性与性能调优
本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍.之后概览Redis提供的高级能力,并在部署.维护.性能调优等多个方面进行更深入的介绍和指导. ...
随机推荐
- 【server 安全】更改本地安全策略及禁用部分服务以进一步增强windows server的安全性
本地安全策略 以上内容的备份 注册表路径: System\CurrentControlSet\Control\ProductOptionsSystem\CurrentControlSet\Contro ...
- linux 命令——30 chown (转)
chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID:组可以是组名或者组ID:文件是以空格分开的要改变权限的文件列表,支持通配符.系统管理员经常使用chown命令,在将文件拷贝 ...
- [转载]AngularJS入门教程02:AngularJS模板
是时候给这些网页来点动态特性了——用AngularJS!我们这里为后面要加入的控制器添加了一个测试. 一个应用的代码架构有很多种.对于AngularJS应用,我们鼓励使用模型-视图-控制器(MVC)模 ...
- Exceptions and Errors on iOS
异常:程序缺陷导致:不可恢复:给开发者使用: 错误:资源受限导致:可恢复:提示给用户. https://blog.jayway.com/2010/10/13/exceptions-and-errors ...
- python_38_try-except异常处理语句及raise的使用
# i=10 # print(30/(i-10)) # #程序将会出现以下报错信息 # # Traceback (most recent call last): # # File "C:/U ...
- Luogu [P1958] 上学路线_NOI导刊2009普及(6)
上学路线_NOI导刊2009普及(6) 题目详见:上学路线_NOI导刊2009普及(6) 这是一道基础的DFS(深搜)题,堪称模板,是新手练习搜索与回溯的好题选. 大致思路:从(1,1)开始搜索,每次 ...
- Bootstrap 提示工具(Tooltip)插件的事件
事件 下表列出了提示工具(Tooltip)插件中要用到的事件.这些事件可在函数中当钩子使用. 事件 描述 实例 show.bs.tooltip 当调用 show 实例方法时立即触发该事件. $('#m ...
- 在React中使用Redux数据流
问题:数据流是什么呢?为什么要用数据流? 答案:1.数据流是我们的行为与相应的抽象 2.使用数据流帮助我们明确了行为的对应的响应 问题: React与数据流的关系 1.React是纯 V 层的前端框架 ...
- Drop it-freecodecamp算法题目
Drop it 1.要求 丢弃数组(arr)的元素,从左边开始,直到回调函数return true就停止. 第二个参数,func,是一个函数.用来测试数组的第一个元素,如果返回fasle,就从数组中抛 ...
- 16.1-Jenkins持续集成01—Jenkins服务搭建和部署
分类: Linux架构篇 一.介绍Jenkins 1.Jenkins概念 Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台.这是一个免费的源代码,可以处理任何 ...