迭代器_可迭代对象_生成器

[可迭代对象]保存的是已经生成好的数据,占用大量的空间
有__iter__方法 就是可迭代对象(Iterable)

[迭代器]保存的是生成数据的方法,占用极小的空间,需要时才返回数据
既有__iter__,也有__next__ 就是迭代器(Iterator)

[生成器]是一个[特殊]的迭代器,保存生成数据的方法
(标志就是def中的[yiled],有了yield的def就不是函数(function)
生成器的send(参数) 可以在唤醒时返回参数(需要变量接收),

可迭代对象(iterable):能用for...in...来遍历其中内容的 数据类型
包含:[list、tuple、dict、set、str](集合数据类型)、[生成器\列表生成式\迭代器]

迭代器(Iterator):能被next()查询的 数据类型 Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算
包含:生成器、generator function

for...in...循环的本质
1.判断是否是可迭代对象
  1.1 是 可迭代对象
    2.1 通过可迭代对象的iter()函数,调用可迭代对象中的__iter__方法的的来返回可迭代对象的迭代器,
    2.2 然后通过迭代器的next()函数,调用迭代器的__next__方法返回数据
    2.3 直到异常StopIteration产生,退出迭代for...in...过程.
1.2 否 报错
TypeError: ‘xxx‘ object is not iterable

判断方式:
from collections import Iterable #调用collections模块中的Iterable 
#例子:
isinstance(‘abc‘, Iterable) # str是否可迭代
True
isinstance([1,2,3], Iterable) # list是否可迭代
True
isinstance(123, Iterable) # 整数是否可迭代
False

总结:

1.迭代器一定是迭代对象,迭代对象不一定是迭代器(list等)

2.生成器一定是迭代器,迭代器中特殊的一种是生成器

3.使用for...in...来遍历迭代对象是最常用的方式

原文地址:https://www.cnblogs.com/spirit911/p/8955320.html

时间: 2024-11-10 16:36:17

迭代器_可迭代对象_生成器的相关文章

Python全栈开发之---迭代器、可迭代对象、生成器

1.什么叫迭代 现在,我们已经获得了一个新线索,有一个叫做"可迭代的"概念. 首先,我们从报错来分析,好像之所以1234不可以for循环,是因为它不可迭代.那么如果"可迭代",就应该可以被for循环了. 这个我们知道呀,字符串.列表.元组.字典.集合都可以被for循环,说明他们都是可迭代的. 我们怎么来证明这一点呢? 1 from collections import Iterable 2 3 l = [1,2,3,4] 4 t = (1,2,3,4) 5 d =

python的生成器与迭代器和可迭代对象

来简单的说下python中的生成器和可迭代对象以及迭代器的问题.只是简单地记录一下并不涉及太深入的内容. 首先来说一下什么是生成器,先看下面的代码: 1 #_*_ coding:utf-8 _*_ 2 3 result = (x for x in range(10)) 4 5 ''' 6 下面print的打印结果 7 <generator object <genexpr> at 0x0000026FA092B360> 8 ''' 9 print(result)  上面的这种代码其实

理解迭代器和可迭代对象

前言: 之前在迭代器.可迭代对象这一部分一直有些混淆,结合一些资料,表达我对这些概念的理解,未必都对,但是适合刚开始入手的朋友们从零开始理解 开门见山首先介绍可迭代对象和迭代器的通俗理解 迭代器就是能被next()调用得到下一次迭代值的对象,迭代器不直接保存迭代的序列值,而保存得到下一次迭代值的算法 可迭代对象就是能被iter()方法调用得到迭代对象的对象,只有可迭代对象才可用于for循环 for循环的底层实现原理: 以下是一个for循环的格式 for i in 可迭代对象: 循环体 实质是调用

学习7: 列表生成式,生成器,迭代器,可迭代对象

1) 列表生成式,即创建列表的方式 列表生成式,这里是中括号[] >>> [x*x for x in range(0,10)] [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>> [x * x for x in range(1, 11) if x % 2 == 0] [4, 16, 36, 64, 100] >>> [m + n for m in 'ABC' for n in 'XYZ'] ['AX', 'AY', 'AZ

Python生成器、迭代器、可迭代对象

把一个列表[]改成()就创建了一个生成器:generator,generator保存的是算法. 可以用于for循环的数据类型:1.集合类型:list tuple dict set str2.generator 可以直接作用于for循环的对象统称为:可迭代对象(Iterable) from collections import Iterable print(isinstance([],Iterable)) print(isinstance({},Iterable)) print(isinstanc

迭代器、可迭代对象、迭代器对象、生成器、生成器表达式和相关的面试题

迭代器: 迭代的工具.迭代是更新换代,如你爷爷生了你爹,你爹生了你,迭代也可以说成是重复,并且但每一次的重复都是基于上一次的结果来的.如计算机中的迭代开发,就是基于软件的上一个版本更新.以下代码就不是迭代,它只是单纯的重复 可迭代对象 python中一切皆对象,对于这一切的对象中,但凡有__iter__方法的对象,都是可迭代对象. 可迭代的对象:Python内置str.list.tuple.dict.set.file都是可迭代对象. 迭代器对象 只有字符串和列表都是依赖索引取值的,而其他的可迭代

迭代器,可迭代对象,迭代器对象和生成器

1  迭代器 迭代的定义:迭代是一个重复的过程,不同于其他纯粹的重复,迭代的每一次结果都是基于上一次迭代的结果产生的. 迭代器就是一个可以进行迭代取值的工具 作用:给我们提供了一种不依赖索引取值的方式 补充:针对双下划线开头,双下滑线结尾的方法 推荐读:双下+方法名 2 可迭代对象 内置有__iter__方法的对象(列表,词典,元组,字符串,集合等) 3 迭代器对象 即内置有__iter__方法也内置有__next__方法的对象(文件,类等) 注意:迭代器对象一定是可迭代对象,但可迭代对象不一定

迭代器 and 可迭代对象

可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的generator function. 这些可以直接作用于for循环的对象统称为可迭代对象:Iterable. 而生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了. 可以被next()函数调用并不断返回下一个值的对象称为迭代器

迭代器和可迭代对象

from collections.abc import Iterator class Company(object): def __init__(self, employee_list): self.employee = employee_list def __iter__(self): # 一般情况下都是这个样做 return MyIterator(self.employee) # def __getitem__(self, item): # return self.employee[item