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

迭代器

什么是迭代器

迭代指的是一个重复的过程,且不是单纯的重复,每次重复都基于上次的结果。

迭代器指的是迭代取值的工具,该工具的特点是可以不依赖于索引取值。

为什么用迭代器

为了找出一种通用的&可以不依赖于索引的迭代取值方式。

如何用迭代器

可迭代的对象:但凡内置有__iter__方法得当对象都称之为可迭代的对象

迭代器对象:既内置有__iter__,又内置__next__方法

关于__iter__方法:

  1. 调用可迭代对象的__iter__会得到一个迭代器对象
  2. 调用迭代器对象的__iter__会得到迭代器本身

迭代器的优缺点

有点

  1. 提供了一种通用的&可以不依赖于索引的迭代取值方式
  2. 同一时刻在内存中只有一个值,更加节省内存

    缺点

  3. 取指定值时不如索引灵活,并且迭代器是一次性的,只能往前取值
  4. 无法预知迭代器数据的个数

可迭代的对象

str、list、tuple、dict、set、文件对象

迭代器对象

文件对象是python定义好的迭代器对象

可迭代对象如何转化为迭代器对象

调用可迭代对象内置的__iter__方法会得到一个返回值,该返回值就是对应的迭代器对象

for循环

for循环准确的说应该是迭代器循环,原理如下:

  1. 先调用in后面可迭代对象的__iter__方法,得到迭代器对象
  2. 执行迭代器的__next__方法得到一个返回值,赋值给每次循环的变量,运行循环体代码
  3. 循环往复,直到迭代器取值完毕抛出异常然后捕捉异常结束循环

    自定义迭代器

    定义一个迭代器必须要有yield关键字

    在函数内但凡包含有yield关键字,运行到yield时,会暂停运行并会得到一个返回值,该返回值成为生成器对象,生成器本质就是迭代器

    yield

  4. 提供一种自定义迭代器的解决方案
  5. yield可用于返回值

    yield和return的异同

    相同点:都可以用于返回值

    不同点:yield可以暂停函数,yield可以返回多个值,而return只能返回一次值且会终止函数的运行。

    一个自定义的生成器

def my_range(start,stop,step=1):
    while start<stop:
        yield start
        start+=step
res=my_range(1,5,2)
print(next(res))
print(next(res))

原文地址:https://www.cnblogs.com/zuanzuan/p/9720875.html

时间: 2024-11-12 05:45:09

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

11.Python初窥门径(函数名,可迭代对象,迭代器)

Python(函数名,可迭代对象,迭代器) 一.默认参数的坑 # 比较特殊,正常来说临时空间执行结束后应该删除,但在这里不是. def func(a,l=[]): l.append(a) return l print(func(1)) # [1] print(func(2)) # [1,2] print(func(3)) # [1,2,3] 二.函数名的应用 函数名指向的是函数的内存地址,加上()就执行这个函数 def func(args): return args print(func) #

python当中的 可迭代对象 迭代器

学习python有一段时间了,在学习过程中遇到很多难理解的东西,做一下总结,希望能对其他朋友有一些帮助. 完全是个人理解,难免有错,欢迎其他大神朋友们批评指正. 1 迭代 什么是迭代呢??我们可以这样理解,一个容器类型的数据,比如 列表[ ]  .元组 () 和 字典 { }, 我们可以把这样类型的数据放入for temp in [1,2,3] 当中,temp 被一次一次的赋值成为后面容器内数据,然后我们拿到temp进行一些想做的事情.那么for 循环中自动的帮我们把数据一次一次的取出来,可以理

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)  上面的这种代码其实

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 =

可迭代对象 Iterable 与 迭代器 Iterator

迭代器 Iterator与可迭代对象  1 常见的可迭代对象: 字符串列表字典集合元组文件句柄 -->> 迭代器range() -->> 只是一个可迭代对象迭代器本身也可迭代 2 判断是否是 可迭代对象 的方法: 1 from collections import Iterable isinstance('abcd',Iterable) 2 可以判断不同方法的差异 dir() 用set集合 有__iter__() 方法 的数据类型 (即 可迭代协议 ------- 数据类型与pyt

可迭代对象和迭代器

1.首先可以用于for循环的对象统称为可迭代对象(Interable),像list dict str都是可迭代对象.可以被next()函数调用并不断返回下一个值的对象成为迭代器(Interable).看一下函数的实现: class Iterable(metaclass=ABCMeta): __slots__ = () @abstractmethod def __iter__(self): ##使用__iter__是迭代对象变为迭代器 while False: yield None @classm

【十】迭代器、生成器、装饰器和标准库

一:迭代器 在python中,很多对象可以直接通过for语句来直接遍历,例如:list.string.dict等等,这些被称为可迭代对象 迭代器是一个可以I记住遍历的位置的对象. 在python中,支持迭代器协议的就是实现对象的iter()和next()方法. iter()方法返回迭代器本身 next()方法返回容器的下一个元素 在结尾时引发stopiteration异常 迭代器有两个基本的方法:__iter__()和next()方法,一个用来获取迭代器对象,一个用来获取容器中的下一个元素 In

计算机基础-----迭代器 和生成器

迭代器 1.1迭代器 和 可迭代对象 迭代器的本质   就是for循环调用的底层内置函数的运用 可迭代对象:字符串.列表.元组.字典.集合都是可迭代的对象  迭代器协议--必须要满足两点才可以叫做可迭代协议 :  内部实现了__iter__和__next__ 1.2迭代器----iterator 通过代码来理解 ''' dir([1,2].__iter__())是列表迭代器中实现的所有方法,dir([1,2])是列表中实现的所有方法,都是以列表的形式返回给我们的,为了看的更清楚,我们分别把他们转

流畅python学习笔记:第十四章:迭代器和生成器

迭代器和生成器是python中的重要特性,本章作者花了很大的篇幅来介绍迭代器和生成器的用法. 首先来看一个单词序列的例子: import re re_word=re.compile(r'\w+') class Sentence(object):     def __init__(self,text):         self.text=text         self.word=re_word.findall(text)     def __getitem__(self, item):   

重修课程day12(函数之迭代器和生成器)

一  迭代器 集合的目的:去重,关系运算. # a={1,2,3,4,5,6,7} # b={41,52,5,26,7,4,2,9,} # print(a-b) isinstance:判断数据的类型,还可以判断是否可迭代. iterable:形容词  可迭代的:from collections import Iterable:用来检测一个对象是否可以迭代. # from collections import Iterable # print(isinstance('fadda',Iterable