`
rockkyle
  • 浏览: 10771 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

python 生成器和迭代器

阅读更多

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生成器和迭代器.docx

    Python生成器和迭代器

    python生成器和迭代器区别

    总的来说,生成器和迭代器是Python中实现迭代的关键工具,它们提供了优雅地处理序列数据的方式,尤其是处理大型数据集时,可以避免一次性加载全部数据导致的内存问题。熟练掌握这两者的使用,能极大地提高Python编程...

    python 生成器 & 迭代器.pdf

    Python 生成器和迭代器 Python 生成器和迭代器是 Python 编程语言中两个重要的概念,它们都是用于处理可迭代对象的。下面我们将对这两个概念进行详细的解释和分析。 一、什么是生成器? 在 Python 中,使用了 ...

    Python_生成器和迭代器的区别.pdf

    Python 中的迭代器和生成器是两个非常重要的概念,它们都是实现可迭代对象的方式,但它们之间有着很大的区别。 迭代器 迭代器是一个实现了 `_iter_` 方法和 `_next_` 方法的类对象。迭代器可以通过 `next()` 方法...

    Python语言基础:迭代器和生成器.pptx

    总结起来,迭代器和生成器都是Python中处理序列的有效工具。迭代器提供了一种方便的方式来遍历任何可迭代对象,而生成器则在节省内存和提高效率方面表现出色,尤其适用于处理大数据集或无限序列。理解并熟练运用这两...

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

    Python中生成器和迭代器的区别(代码在Python3.5下测试): Num01–&gt;迭代器 定义: 对于list、string、tuple、dict等这些容器对象,使用for循环遍历是很方便的。在后台for语句对容器对象调用iter()函数。iter()是python...

    Python中生成器和迭代器的区别详解.docx

    在Python编程语言中,生成器和迭代器是两种重要的数据处理工具,它们允许开发者高效地处理大量数据,尤其是那些无法一次性加载到内存中的大数据集。本文将深入探讨Python中的生成器和迭代器的区别。 首先,我们需要...

    python 生成器和迭代器的原理解析

    Python中的生成器和迭代器是两种非常重要的编程工具,它们在处理大数据集或节省内存方面具有显著优势。本文将深入解析这两种概念,并提供详细的实例来帮助理解。 首先,生成器(Generator)是一种特殊的迭代器,它...

    「Python系列」Python迭代器与生成器.md

    「Python系列」Python迭代器与生成器

    深入讲解Python中的迭代器和生成器

    ### 深入讲解Python中的迭代器和生成器 #### 一、迭代器的基本概念 在Python编程语言中,迭代器是一种遵循特定协议的对象,它允许我们遍历一系列数据项。这种遍历方式广泛应用于各种数据结构,如列表(list)、...

    Python生成一个迭代器的实操方法

    在Python编程语言中,迭代器是一种非常重要的工具,特别是在处理大量数据时,它能有效地节省内存,因为它只在需要时生成下一个值。本篇文章将深入探讨如何在Python中生成一个迭代器,并通过实例来演示其操作方法。 ...

    python 协程中的迭代器,生成器原理及应用实例详解

    本文实例讲述了python 协程中的迭代器,生成器原理及应用。分享给大家供大家参考,具体如下: 1.迭代器理解 迭代器: 迭代器是访问可迭代对象的工具 迭代器是指用iter(obj)函数返回的对象(实例) 迭代器是指用next(it...

    05-python-迭代器-生成器-with语句和上下文管理器-修饰符

    在Python编程语言中,迭代器、生成器、with语句和上下文管理器以及修饰符是四个非常重要的概念,它们在处理数据流和资源管理时起着关键作用。以下是关于这些知识点的详细解释: 1. **迭代器**: - 迭代器是一种...

    Python中的迭代器与生成器:深入理解与应用

    本文将深入探讨Python中的迭代器和生成器,分析它们的定义、区别、使用场景以及如何实现它们。 本文将总结迭代器和生成器的关键点,并提供一些最佳实践,帮助读者在实际项目中更好地选择和使用迭代器和生成器。 ...

    Python2.5中的迭代器与生成器(自己写的)

    第一次写的文章 Python2.5中的迭代器与生成器

    详解Python迭代和迭代器

    在Python编程语言中,迭代和迭代器是两个非常重要的概念,它们在处理数据集合时扮演着核心角色。本文将深入探讨这两个概念,并通过实例来帮助理解。 首先,我们需要理解什么是可迭代对象。在Python中,可迭代对象是...

    Python进阶之迭代器与迭代器切片教程

    在Python编程语言中,迭代器和切片是两种强大的工具,它们各自有着不同的用途,而当两者结合时,可以提供更灵活的数据处理方式。本文主要探讨了Python中的迭代器和迭代器切片。 迭代器是Python的一个核心特性,它...

    一篇文章弄懂Python中的可迭代对象、迭代器和生成器

    在Python编程语言中,了解可迭代对象、迭代器和生成器是至关重要的,因为它们构成了Python数据处理的核心机制。这篇文章将深入探讨这三个概念,并通过示例代码帮助理解它们的工作原理。 首先,**可迭代对象**是指...

Global site tag (gtag.js) - Google Analytics