Python高级特性——迭代器
可以直接用for循环的数据类型有:
- 集合数据类型,如:list、tuple、dict、set、str等;
- 生成器generator,包括生成器和带yield的generator function。
以上这些可以直接使用for循环的对象统称为可迭代对象:Iterable.
可以使用isinstance()函数来判断一个对象是不是Iterable对象:
>>> from collections import Iterable
>>> isinstance([],Iterable)
True
>>> isinstance({},Iterable)
True
>>> isinstance('zyx',Iterable)
True
>>> isinstance((x for x in range()),Iterable)
True
>>> isinstance(,Iterable)
False
又生成器不但可以使用for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误。可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator.
可以使用isinstance()判断一个对象是不是Iterator:
>>> from collections import Iterator
>>> isinstance([],Iterator)
False
>>> isinstance({},Iterator)
False
>>> isinstance('xyz',Iterator)
False
>>> isinstance((x for x in range(10)),Iterator)
True
注意:生成器都是Iterator对象,但是list、set、str、虽然是Iterable,却不是Iterator.
把list、dict、str、等Iterable对象变成Iterator对象可以使用iter()函数:
>>> isinstance(iter([]),Iterator)
True
>>> isinstance(iter('abc'),Iterator)
True
问题来了:为什么list、dict、str数据类型不是Iterator呢?
这是因为python中的Iterator迭代器对象表示的是一个数据流,Iterator对象可以被next()调用并不断返回下一个值,知道抛出StopIteration错误。可以把这个数据流看作是一个有序序列,但我们却不知道序列的长度,只能不断的通过next()函数按需去计算下一个数据,我们称Iterator的计算是惰性的,只有在需要返回下一个数据的时候它才会计算。Iterator甚至可以表示一个无限大的数据流,例如正偶数。而使用list是永远不能存储全体正偶数的。
总结:
- 凡是可以使用for循环的对象都是Iterable类型;
- 凡是可以使用next()函数的对象都是Iterator类型,表示一个惰性计算的序列
- 集合数据类型例如list、dict、str等是Iterable却不是Iterator,可以通过iter()函数获得一个Iterator对象。
- python的for循环实质上就是通过不断的调用next()函数实现的。
Python高级特性——迭代器的更多相关文章
- Python高级特性-迭代器和生成器
迭代器 Python中可迭代对象(iterable)通俗指可直接作用与For循环的数据对象,如Python中的集合数据类型,字符串(str),列表(list),元组(tuple),集合(set),字典 ...
- python高级特性-迭代器
凡是可作用于for循环的对象都是Iterable类型: 凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列: 集合数据类型如list.dict.str等是Itera ...
- Day11 python高级特性-- 迭代器 Iterator
直接可以作用于for循环的数据类型有以下几种: • 集合数据类型: list.tuple.dict.set.str • Generator: 生成器 和 带 y ...
- Python高级特性(1):Iterators、Generators和itertools(转)
译文:Python高级特性(1):Iterators.Generators和itertools [译注]:作为一门动态脚本语言,Python 对编程初学者而言很友好,丰富的第三方库能够给使用者带来很大 ...
- Python高级特性之:List Comprehensions、Generator、Dictionary and set ...
今天帅气的易哥和大家分享的是Pyton的高级特性,希望大家能和我一起学习这门语言的魅力. Python高级特性之:List Comprehensions.Generator.Dictionary an ...
- Python 高级特性介绍 - 迭代的99种姿势 与协程
Python 高级特性介绍 - 迭代的99种姿势 与协程 引言 写这个笔记记录一下一点点收获 测试环境版本: Python 3.7.4 (default, Sep 28 2019, 16:39:19) ...
- 三、python高级特性(切片、迭代、列表生成器、生成器)
1.python高级特性 1.1切片 list列表 L=['Mli','add','sal','saoo','Lkkl'] L[0:3] #即为['Mli','add','sal'] 从索引0开始 ...
- python高级特性:切片/迭代/列表生成式/生成器
廖雪峰老师的教程上学来的,地址:python高级特性 下面以几个具体示例演示用法: 一.切片 1.1 利用切片实现trim def trim(s): while s[:1] == " &qu ...
- python高级特性和高阶函数
python高级特性 1.集合的推导式 列表推导式,使用一句表达式构造一个新列表,可包含过滤.转换等操作. 语法:[exp for item in collection if codition] if ...
随机推荐
- 如何在导航条的button点击变换时,切换对应的控制器
1.导航条内的button被点击 切换对应的控制器 让控制器作为调航条的代理 1.定义代理 2.遵循代理协议 3.实现代理 4.在合适的地方调用代理 当按钮被点击的时候切换控制器
- oracle创建jobs定时任务报错:PLS-00306: wrong number or types of arguments in call to 'JOB'
原脚本: begin sys.dbms_job.submit(job => job, what => 'xxx;', ...
- 使用 webservice 实现 RPC 调用
WebService 介绍 Web service 是一个平台独立的,低耦合的 web 的应用程序用于开发分布式的互操作的应用程序.Web Service 技术, 能使得运行在不同机器上的不同应用无须 ...
- Spring底层源码分析
Spring 运行原理 Spring 启动时读取应用程序提供的 Bean 配置信息,并在 Spring 容器中生成一份相应的Bean 配置注册表,然后根据这张注册表实例化 Bean,装配好 Bean ...
- Rest微服务案例
数据库 数据库名称为Product; 创建api子工程,项目名为springcloud_api Product实体类 public class Product implements Serializa ...
- [TimLinux] Python 自定义描述符
1. 含义 在类中,含有属性(该属性需要存在类对象到__dict__属性中,不能为存在示例对象的__dict__属性中),对属性对操作(访问,设置值,删除)可以自定义行为,这样对自定义行为成为自定义属 ...
- openlayers4 入门开发系列结合 echarts4 实现散点图(附源码下载)
前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...
- ARTS-S golang goroutines and channels(二)
向tcp服务端发消息 package main import ( "io" "log" "net" "os" ) fun ...
- 【JS】303- 编写更好的 JavaScript 条件式和匹配条件的技巧
译者:@chorer 译文:https://chorer.github.io/2019/06/24/Trs-更好的JavaScript条件式和匹配标准技巧/作者:@Milos Protic原文:htt ...
- rails 构建 API
我是来鼓吹使用 Rails 写 API 的. 原文在此: https://labs.kollegorna.se/blog/2015/04/build-an-api-now/ 原文有一个很大的缺陷就是读 ...