Python: 迭代器与生成器小结

迭代器与生成器的区别:

1. 迭代器由Class对象创建. 生成器由包含yield表达的Function对象或者Generator Expression创建.

2. 迭代器的原理:

(1)由Iterable.__iter__()返回Iterator.

(2)由Iterator.__next__()返回迭代值, 直到StopIteration.

一般迭代器同时实现__iter__()与__next__(), 在__iter__()返回self, 在__next__()返回迭代值,直到StopIteration

生成器原理:

(1)生成器都有next(), send(), close(), throw()

(2)调用next()/send(V)执行到下一个yield表达式,并返回yield表达式结果. 如果是send(V)将用V代替yield表达式的值往下执行, next()等价send(None)

(3)生成器不允许return任何值.

时间: 2024-08-28 16:28:52

Python: 迭代器与生成器小结的相关文章

python迭代器、生成器和yield语句

http://blog.csdn.net/pipisorry/article/details/22107553 一.迭代器(iterator) 迭代器:是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发StopIteration.任何这类的对象在Python中都可以用for循环或其他遍历工具迭代,迭代工具内部会在每次迭代时调用next方法,并且捕捉StopIteration异常来确定何时离开. 迭代器对象要求支持迭代

Python迭代器和生成器介绍

Python迭代器和生成器介绍 迭代器 迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发StopIteration. 在for循环中,Python将自动调用工厂函数iter()获得迭代器,自动调用next()获取元素,还完成了检查StopIteration异常的工作. 常用的几个内建数据结构tuple.list.set.dict都支持迭代器,字符串也可以使用迭代操作. 你也可以自己实现一个迭代器,如上所述,只

Lesson 023 —— python 迭代器与生成器

Lesson 023 -- python 迭代器与生成器 迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 迭代器有两个基本的方法:iter() 和 next(). 字符串,列表或元组对象都可用于创建迭代器: >>>list=[1,2,3,4] >>> it = iter(list) # 创建迭代器对象 >>

python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)

1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,next 方法 内置函数iter(),next()  本质上都是用的对象.__iter__(),__next__()的方法 内置函数 iter(iterable),表示把可迭代对象 变成迭代器(iterator) 内置函数next(iterator) ,表示查看下一次迭代的值(当然也可以用 iterato

python——迭代器、生成器、装饰器

迭代器 迭代器规则 迭代:重复做一些事很多次,就像在循环中那样. 不仅可以对字典和序列进行迭代,还可以对其他对象进行迭代:只要该对象实现了__iter__方法. __iter__方法会返回一个迭代器(iterator),所谓的迭代器就是具有next方法(这个方法在调用时不需要任何参数)的对象.在调用next方法时,迭代器会返回他的下一个值.如果next方法被调用,但迭代器没有值可以返回,就会引发一个StopIteration异常. 注意:迭代器规则在3.0中有一些变化.在新的规则中,迭代器对象应

Python 迭代器、生成器和列表解析

迭代器 迭代器在 Python 2.2 版本中被加入, 它为类序列对象提供了一个类序列的接口. Python 的迭代无缝地支持序列对象, 而且它还允许迭代非序列类型, 包括用户定义的对象.即迭代器可以迭代不是序列但表现出序列行为的对象, 例如字典的 key , 一个文件的行, 等等.迭代器有以下特性: 提供了可扩展的迭代器接口. 对列表迭代带来了性能上的增强. 在字典迭代中性能提升. 创建真正的迭代接口, 而不是原来的随机对象访问. 与所有已经存在的用户定义的类以及扩展的模拟序列和映射的对象向后

python迭代器和生成器

心情有点复杂,同学和几个发小这几天都相继做了爸爸,手段都很低级,肚子搞大,唉~而我确还在组建家庭的路上,我不想太急,家里毕竟不能为我提供更多的帮助,坚持吧! 工作之余还在学习确实很累,想一锹挖个井实在太难,还是得慢慢得来,慢慢得学必定有很多的收获,坚持吧! 上海的天气好热,早上出门挤上地铁全身已湿透,晚上下班铺面而来的全是汽车尾气和热浪,坚持吧! 人生还早,谁能笑到最后呢,坚持吧! 1.迭代器协议 由于生成器自动实现了迭代器协议,我们有必要了解迭代器协议是什么,才能更好的理解生成器. 1)迭代器

python 迭代器和生成器

迭代器 Iterator是迭代器的意思,它的作用是一次产生一个数据项,直到没有为止.这样在 for 循环中就可以对它进行循环处理了.那么它与一般的序列类型(list, tuple等)有什么区别呢?它一次只返回一个数据项,占用更少的内存.但它需要记住当前的状态,以便返回下一数据项.它是一个有着next()方法的对象.而序列类型则保存了所有的数据项,它们的访问是通过索引进行的. 迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末

Python迭代器与生成器

生成器 仅仅拥有生成某种东西的能力,如果不用__next__方法是获取不到值得. 创建一个生成器函数 >>> def scq(): ...    print("11") # 当函数代码块中遇到yield关键字的时候,这个函数就是一个生成器函数 ...    yield 1 ...    print("22") ...    yield 2 ...    print("33") ...    yield 3 ... 把生成器赋值给