python 生成器和迭代器
一、迭代器
所谓的迭代器就能具有next方法的对象,调用next方法是,迭代器返回其下一个值,若没有值,则返回StopInteration异常,__iter__方法返回一个迭代器
注意:python 3.0中,迭代器实现的方法为__next__,而不是next
>>> class Fib: def __init__(self): self.a=0 self.b=1 def __iter__(self): return self def next(self): self.a,self.b=self.b,self.a+self.b if self.a>100:raise StopIteration return self.a
>>> fib=Fib() >>> fib.next() 1 >>> fib.next() 1 >>> fib.next() 2 >>> fib.next() 3 >>> fib.next() 5 >>> fib.next() 8 >>> fib.next() Traceback (most recent call last): File "<pyshell#177>", line 1, in <module> fib.next() File "<pyshell#169>", line 10, in next if self.a>10:raise StopIteration StopIteration >>>
生成list,
>>> fib=Fib() >>> list(fib) <__main__.Fib instance at 0x00000000034603C8> [1, 1, 2, 3, 5, 8] >>> list(fib) <__main__.Fib instance at 0x00000000034603C8> []
>>> fib=Fib() >>> fib.next() 1 >>> list(fib) <__main__.Fib instance at 0x00000000036075C8> [1, 2, 3, 5, 8]
生成的list和当前迭代点有关,python提供内建函数iter,从可迭代对象获得迭代器
>>> alist='abcde'
>>> blist=[1,2,3,4]
>>> clist=('c','d','e')
>>> dlist={'a':1,'b':2}
>>> ita=iter(a)
>>> itb=iter(blist)
>>> ita=iter(alist)
>>> itc=iter(clist)
>>> itd=iter(dlist)
>>> itb.next()
1
>>> itc.next()
'c'
>>> ita.next()
'a'
>>> itd.next()
'a'
>>> itd.next()
'b'
字典迭代的为key
二、生成器
包含yield的语句的函数称为生成器,除了名字不同以外,和普通的函数也有很大的差异,这就在于它不像普通的函数返回值,而是每次产生一个断点,激活后就重那里开始
生成器由2部分组成,生成器函数和生成器的迭代器,前者是def定义包含yield语句的函数,后者为函数返回的部分
#!/usr/bin/env python #-*- coding:utf-8 -*- def yi(alist): for sublist in alist: for el in sublist: print "before stop-point" try: yield el except StopIteration: print "itering is over" print "after stop-point"
>>> import yie_test >>> a=[[1,2],[3,4]] >>> dir(yie_test) ['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'yi'] >>> te=yie_test.yi(a) >>> te.next <method-wrapper 'next' of generator object at 0x7f3db05e8e10> >>> te.next() before stop-point 1 >>> te.next() after stop-point before stop-point 2 >>> te.next() after stop-point before stop-point 3可以看出在每次执行的时候在yield语句处停住,可以通过type命令查看yi()类型为generator
生成器其他方法:
send:外部域访问生成器的方法,需要在内部挂起生成器,yield作为表达式使用而不是语句,换句话说当生成器重新运行的时候,返回外部通过send发送的值
def repeater(value): while True: new=(yield value) if new is not None: value=new
>>> import yie_test >>> r=yie_test.repeater(10) >>> r.next() 10 >>> r.next() 10 >>> r.next() 10 >>> r.send(11) 11 >>> r.next() 11 >>> r.next() 11 >>> r.next() 11
close方法用于停止生成器
throw方法用于在生成器内部引发一个异常。
相关推荐
Python生成器和迭代器
总的来说,生成器和迭代器是Python中实现迭代的关键工具,它们提供了优雅地处理序列数据的方式,尤其是处理大型数据集时,可以避免一次性加载全部数据导致的内存问题。熟练掌握这两者的使用,能极大地提高Python编程...
Python 生成器和迭代器 Python 生成器和迭代器是 Python 编程语言中两个重要的概念,它们都是用于处理可迭代对象的。下面我们将对这两个概念进行详细的解释和分析。 一、什么是生成器? 在 Python 中,使用了 ...
Python 中的迭代器和生成器是两个非常重要的概念,它们都是实现可迭代对象的方式,但它们之间有着很大的区别。 迭代器 迭代器是一个实现了 `_iter_` 方法和 `_next_` 方法的类对象。迭代器可以通过 `next()` 方法...
总结起来,迭代器和生成器都是Python中处理序列的有效工具。迭代器提供了一种方便的方式来遍历任何可迭代对象,而生成器则在节省内存和提高效率方面表现出色,尤其适用于处理大数据集或无限序列。理解并熟练运用这两...
Python中生成器和迭代器的区别(代码在Python3.5下测试): Num01–>迭代器 定义: 对于list、string、tuple、dict等这些容器对象,使用for循环遍历是很方便的。在后台for语句对容器对象调用iter()函数。iter()是python...
在Python编程语言中,生成器和迭代器是两种重要的数据处理工具,它们允许开发者高效地处理大量数据,尤其是那些无法一次性加载到内存中的大数据集。本文将深入探讨Python中的生成器和迭代器的区别。 首先,我们需要...
Python中的生成器和迭代器是两种非常重要的编程工具,它们在处理大数据集或节省内存方面具有显著优势。本文将深入解析这两种概念,并提供详细的实例来帮助理解。 首先,生成器(Generator)是一种特殊的迭代器,它...
「Python系列」Python迭代器与生成器
### 深入讲解Python中的迭代器和生成器 #### 一、迭代器的基本概念 在Python编程语言中,迭代器是一种遵循特定协议的对象,它允许我们遍历一系列数据项。这种遍历方式广泛应用于各种数据结构,如列表(list)、...
在Python编程语言中,迭代器是一种非常重要的工具,特别是在处理大量数据时,它能有效地节省内存,因为它只在需要时生成下一个值。本篇文章将深入探讨如何在Python中生成一个迭代器,并通过实例来演示其操作方法。 ...
本文实例讲述了python 协程中的迭代器,生成器原理及应用。分享给大家供大家参考,具体如下: 1.迭代器理解 迭代器: 迭代器是访问可迭代对象的工具 迭代器是指用iter(obj)函数返回的对象(实例) 迭代器是指用next(it...
在Python编程语言中,迭代器、生成器、with语句和上下文管理器以及修饰符是四个非常重要的概念,它们在处理数据流和资源管理时起着关键作用。以下是关于这些知识点的详细解释: 1. **迭代器**: - 迭代器是一种...
本文将深入探讨Python中的迭代器和生成器,分析它们的定义、区别、使用场景以及如何实现它们。 本文将总结迭代器和生成器的关键点,并提供一些最佳实践,帮助读者在实际项目中更好地选择和使用迭代器和生成器。 ...
第一次写的文章 Python2.5中的迭代器与生成器
在Python编程语言中,迭代和迭代器是两个非常重要的概念,它们在处理数据集合时扮演着核心角色。本文将深入探讨这两个概念,并通过实例来帮助理解。 首先,我们需要理解什么是可迭代对象。在Python中,可迭代对象是...
在Python编程语言中,迭代器和切片是两种强大的工具,它们各自有着不同的用途,而当两者结合时,可以提供更灵活的数据处理方式。本文主要探讨了Python中的迭代器和迭代器切片。 迭代器是Python的一个核心特性,它...
在Python编程语言中,了解可迭代对象、迭代器和生成器是至关重要的,因为它们构成了Python数据处理的核心机制。这篇文章将深入探讨这三个概念,并通过示例代码帮助理解它们的工作原理。 首先,**可迭代对象**是指...