迭代器

Python的迭代器和生成器详解

こ雲淡風輕ζ 提交于 2019-12-03 03:31:24
我们说Python是一门高效的语言,在于它内置的一些变量访问模式——其中迭代器和生成器,可以算是Python的特色了,功能强大,用起来很爽 迭代器(Iterator) 迭代器简介 迭代器(iterator)也成游标(cursor),是实现了迭代操作的对象,通过迭代器开发人员可以不同知道容器内部的详细情况而在容器(如链表、矩阵)上进行遍历 它是一个带状态的对象;在调用next()函数的时候返回容器的下一个值, 任何实现了__iter()__和__next()__方法的对象都是迭代器 ,__iter()__返回迭代器自身,__next()__返回容器的下一个值,如果容器没有更多的元素,就抛出StopIteration异常——所以说,迭代器是一个实现了工厂模式的对象 迭代器的好处总结起来八个字: 延迟计算,按需调用 Python内置的 iter() 函数用于生成一个迭代器,其中括号内参数可以是字符串、列表、或者元祖(它们都是可迭代对象,即可以用for..in语句进行遍历的对象) i = iter( "Hello" ) 使用 next() 函数对迭代器进行遍历 >>> next (i) H >>> next (i) e itertools模块 Python内指了一个很有意思的支持迭代的工具模块:itertools,该模块提供的全部是处理迭代功能的函数,它们的返回值不是list而是迭代对象

Python 迭代器和生成器

℡╲_俬逩灬. 提交于 2019-12-03 03:31:03
初学python 迭代器和生成器是两个比较陌生的概念,下面根据《python基础教程》中相关内容进行总结: 简单来说,迭代器是一个对象,实现__iter__方法的对象,且对象中具有next方法(一个实现了__iter__方法的对象是可迭代的,一个实现了next方法的对象是迭代器);生成器是一个函数,具有yield的函数都可称为生成器。 迭代器 使用斐波那契数列为例: 使用迭代器如下 </pre><pre name="code" class="python">class fibs(object): """docstring for fibs""" def __init__(self): self.a=0 self.b=1 def next(): self.a, self.b=self.b, self.a+self.b return self.a def __iter(self): return self 使用 fib=fibs() 可以生成迭代器对象fib,使用fib.next()可以依次访问fib中的值,当然也可以使用for i in fib:进行访问。 当然,fibs可以使用list实现,迭代器的优势在于,不用像list一样一次性开辟大量内存空间获取所有值,迭代器只需计算一个值获取一个值,不用担心list长度问题。 内建函数iter()可以从可迭代的对象中获取迭代器: 如it

python中迭代器和生成器的简单介绍

社会主义新天地 提交于 2019-12-03 03:30:54
# -*- coding: utf-8 -*- """ 迭代器和生成器 迭代器:类型list、tuple、file、dict的对象有__iter__()方法,标志着它们能够迭代 用__iter__()方法生成迭代对象,然后用__next__()方法访问 生成器:是迭代器,__iter__()和next();针对大数据的时候,Python处理列表时,将全部数据都读入到内存,而 迭代器(生成器是迭代器)的优势就在于只将所需要的读入内存里,因此生成器解析式比列表解析式少占内存 一个简单的生成器my_generator = (x*x for x in range(4)) yield:生成器的标志,yield除了作为生成器的标志之外,还有一个功能就是返回值;作为生成器的函数, 由于有了yield,遇到它则程序挂起 yield和return的区别:return返回后,程序后面的语句不执行,yield返回后,程序挂起,再次调用__next__()时,继续执行后面的语句 """ class MyIter: '''简单的range迭代器实现''' def __init__(self,n): self.i=0 self.n=n def __iter__(self): '''__iter__()是类中的核心,它返回了迭代器本身,实现了__iter__()方法的对象,即意味着其可迭代''' print(

Python中的迭代器与生成器

时光怂恿深爱的人放手 提交于 2019-12-03 03:30:42
Python中的迭代器与生成器介绍 一、迭代器iterator 迭代器是访问可迭代对象的工具。 迭代器是指用iter(obj)函数返回的对象 迭代器是可以用next(it)函数获取可迭代对象的数据 1、迭代器函数 iter()与next() iter(iterable)从可迭代对象中返回一个迭代器,iterable必须是 能提供一个迭代器的对象 next(iterable) 从迭代器iterator中获取下一个记录,如果无法获 取下一条记录,则触发StopIterator异常 说明: ①迭代器只能往前取值,不会后退 ②用iter函数可以返回一个可迭代对象的迭代器 示例: >>> L = [1,3,5,7] >>> it = iter(L) #让L提供一个能访问自己的迭代器 >>> next(it) 1 >>> next(it) 3 2、迭代器的用途: 可以依次访问可迭代对象的数据(可代替循环遍历) 示例:>>> L = [1,23,45,6] >>> it = iter(L) >>> while True: try: x = next(it) print(x) except StopIteration: break 二、迭代工具函数: 作用是生成一个个性化的可迭代对象 函数: zip(iter1 [,iter2[....]]) 返回一个zip对象,此对象用于生成元组

python3迭代器和生成器

梦想的初衷 提交于 2019-12-03 03:30:16
迭代器: 访问集合元素的一种方式。 字符串,列表或元组对象 都可用于创建迭代器。 for i in 10: print(i) 即:int类型不可以 迭代器: 可以记住遍历的对象的上一次位置; 从集合的第一个元素开始访问,直到所有的元素被访问结束。 即:只能往前不会后退。 for i in range(10): print(i) 如图: 手动创建: items = [0,1,2,3,4,5,6] #it:迭代器 it = list(iter(items)) print(it) 如图: 自定义迭代器: 内建函数 iter()可以从 可迭代对象中获得迭代器。 可迭代对象: list tuple dict str set class Container: def __init__(self,start,end): self.start=start self.end=end def __iter__(self): print('调用了 __iter__(self) 方法') return self #返回迭代器 对象本身 def __next__(self): ''' self.start 即时开始位置也是记录位置的状态 :return: ''' if self.start<self.end: i = self.start self.start = self.start+1 return i

Python 之迭代器与生成器

淺唱寂寞╮ 提交于 2019-12-03 03:29:57
目录 一 , 迭代器 1 , 初识迭代器 2 , 创建一个迭代器 3 , StopIteration 二 , 生成器 1 , 初识生成器 一 , 迭代器 1 , 初识迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式。 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 迭代器有两个基本的方法: iter() 和 next() 。 字符串,列表或元组对象都可用于创建迭代器: >>>list=[1,2,3,4] >>> it = iter(list) # 创建迭代器对象 >>> print (next(it)) # 输出迭代器的下一个元素 1 >>> print (next(it)) 2 >>> 迭代器对象可以使用常规for语句进行遍历: #!/usr/bin/python3 list=[1,2,3,4] it = iter(list) # 创建迭代器对象 for x in it: print (x, end=" ") 执行以上程序,输出结果如下: 1 2 3 4 也可以使用 next() 函数: #!/usr/bin/python3 import sys # 引入 sys 模块 list=[1,2,3,4] it = iter(list) # 创建迭代器对象 while True:

浅析 python 迭代器与生成器

此生再无相见时 提交于 2019-12-03 03:25:14
转载自我自己的 github 博客 ——> 半天钟的博客 要这篇博文有何用? 这篇博文是用于帮助理解 python 可迭代对象、迭代器与生成器的 ,你在阅读后应该能够比较清晰的理解 python 中迭代相关的概念与流程。 这篇博文能够解答: 在 python 中究竟什么是 迭代 ? 什么是 可迭代的对象 ,为什么 python 的序列类型的对象均可迭代? 迭代器 是啥?它和可迭代对象有什么关联? 生成器 又是啥? 生成器和迭代器有什么区别? 迭代的概念简述 循环就是迭代吗? 答:不是,但是迭代与循环有着千丝万缕的联系。 迭代是一个做有限次或者 “无限次” 重复动作的过程 、在这个过程里上一次重复动作的 结束状态 是下一次重复动作的**开始状态。**每一次重复都可以称之为一次迭代。 相比于单纯的循环、迭代有一个 额外的限制条件 —— 必须存在着 记录状态 的记录员,用来保存上一次迭代的结束状态。 下面这个代码说明了循环和迭代的区别,其中模拟的迭代过程中的变量 i 就是记录员: #单纯的循环 while True : print ( 'This is Loop' ) #模拟的迭代过程 i = 0 while True : print ( 'This is iter of No.' + str ( i ) ) i += 1 结果: #单纯的循环 This is Loop This is

python迭代器和生成器 区别

两盒软妹~` 提交于 2019-12-03 03:24:57
python迭代器和生成器 区别 1.迭代器就是对象提供了next方法,他只有两种方法:一是返回迭代下一项,二就是抛出异常,终指迭代 2.生成器自动实现了迭代器的协议,使用yield语句而不是我们经常使用的return,yield每次返回一个结果,每个结果中间函数处于挂起状态 来源: CSDN 作者: Travelerwz 链接: https://blog.csdn.net/Travelerwz/article/details/78879830

Python中生成器和迭代器的区别

我的未来我决定 提交于 2019-12-03 03:24:39
Python中生成器和迭代器的区别(代码在Python3.5下测试): Num01–>迭代器 定义: 对于list、string、tuple、dict等这些容器对象,使用for循环遍历是很方便的。在后台for语句对容器对象调用iter()函数。iter()是python内置函数。 iter()函数会返回一个定义了next()方法的迭代器对象,它在容器中逐个访问容器内的元素。next()也是python内置函数。在没有后续元素时,next()会抛出一个StopIteration异常,通知for语句循环结束。 迭代器是用来帮助我们记录每次迭代访问到的位置,当我们对迭代器使用next()函数的时候,迭代器会向我们返回它所记录位置的下一个位置的数据。实际上,在使用next()函数的时候,调用的就是迭代器对象的 _next_ 方法(Python3中是对象的 _next_ 方法,Python2中是对象的next()方法)。所以,我们要想构造一个迭代器,就要实现它的 _next_ 方法。但这还不够,python要求迭代器本身也是可迭代的,所以我们还要为迭代器实现 _iter_ 方法,而 _iter_ 方法要返回一个迭代器,迭代器自身正是一个迭代器,所以迭代器的 _iter_ 方法返回自身self即可。 一些术语的解释: 1,迭代器协议:对象需要提供next()方法,它要么返回迭代中的下一项

Python迭代器,生成器和协程

一曲冷凌霜 提交于 2019-12-03 03:24:19
Python迭代器,生成器和协程 基础概念 在学习Python协程之前首先需要了解Python生成器的概念,而生成器又是一种特殊的迭代器,所以从迭代器开始学习。 Python迭代器(Iterator) 首先了解可迭代对象(interable), 具体来说就是遵循了可迭代协议的对象,比如查看Python list内置类的源码可以发现它实现了 iter ()函数,所以list是一个可迭代对象,当然还有dict, str, set等等。 可迭代协议:含 iter ()方法。且可迭代对象中的 iter ()方法返回的是一个对应的迭代器。(如list对应的迭代器就是list_iterator) 而迭代器与可迭代对象不同的是,迭代器对象不仅需要实现 iter ()方法,它还需要实现 next ()方法,即迭代器协议,事实上任何实现了 iter ()和 next ()方法的类对象都可以是迭代器对象。 迭代器协议: - 含 iter ()方法。且方法返回的Iterator对象本身 - 含 next ()方法,每当 next ()方法被调用,返回下一个值,直到没有值可以访问,这个时候会抛出stopinteration的异常。 此外迭代器含有两个基本的方法iter()和next(), iter()方法的作用是返回一个迭代器对象,当我们使用迭代器的next()方法显式获取元素的时候