`

python 迭代器 生成器

 
阅读更多

 

知识背景:

 

1 调用一个普通的Python函数时,一般是从函数的第一行代码开始执行,结束于return语句、异常或者函数结束(可以看作隐式的返回None)

2 一旦函数将控制权交还给调用者,就意味着全部结束。函数中做的所有工作以及保存在局部变量中的数据都将丢失

3 再次调用这个函数时,一切都将从头创建。

4 如上流程其实是调用一个标准函数的过程,而且一个标准函数只能返回一个值

 

 

需求来了:

创建能产生一个序列的函数

 

此时出现了关键字 yield应用而生:

 

return: 函数将执行代码的控制权返回给函数调用者

yield: 控制权的转移是临时和自愿的,我们的函数将来还会收回控制权

 

 

带有yield关键字的函数叫做生成器,这个生成器就完成了返回一个序列的函数的目的。

 

那么生成器函数和普通标准函数区别在哪里呢?

1 除了有一个关键词yield之外,生成器函数的写法和普通函数一样

2 生成器函数也可以有return

3 生成器函数返回生成器的迭代器,俗称生成器。

4 可以使用方法 next()从生成器中得到下一个值

5 每次生成器被调用时,其内部使用yield返回数值给调用者,并记录当前执行状态,

也就是说 yield是专门给生成器使用的特殊return

 

 

 

案例扩展:

 

def fab(max): 
    n, a, b = 0, 0, 1 
    while n < max: 
        yield b 
        # print b 
        a, b = b, a + b 
        n = n + 1 

>>> for n in fab(5):     
...     print n 	

解释如下:

1 调用时 返回迭代器(此时函数体是不会执行的,只有在调用返回的迭代器next()方法或者用for循环遍历时--for循环会自动调用迭代器的next(),并)
2 for的每一次循环,会执行fab函数体,即执行迭代器的一次迭代,迭代的内容是执行到函数体yield,返回迭代值。
3 执行for的第二次循环,执行fab函数,即执行第二次迭代,第二次迭代是从上次迭代执行中断处yield b的下一个语句继续执行,然后执行到下一个yield b返回迭代值,再次中断。
4 yield将每次中断做了记录,把一个函数改写为一个 generator 并持有了迭代能力
5 区分 fab 和 fab(5),fab 是一个 generator function,而 fab(5) 是调用 fab 返回的一个 generator,好比类的定义和类的实例的区别


可以使用来验证上述几条:
>>> f = fab(5) 
 >>> f.next()     这里迭代器的next() 和  for n in fab(5): 中执行每一次循环的执行效果是一样的,我们用 f.next()来验证上述执行的1,2,3步骤
 1 
 >>> f.next() 
 1 
 >>> f.next() 
 2 
 >>> f.next() 
 3 
 >>> f.next() 
 5 

 

 

 参考链接: http://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/

 

 

 

 

 

分享到:
评论

相关推荐

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

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

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

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

    Python 迭代器 iteraor

    压缩包内的文件“Python 高级编程-[0001]-[Python 迭代器 iteraor].docx”可能是一个详细的教程,涵盖了迭代器的高级用法,可能包括生成器(generator)——这是Python特有的迭代器实现,它们允许我们创建惰性计算的...

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

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

    python迭代器与生成器详解,附源码

    ### Python迭代器与生成器详解 #### 手动创建迭代器 在Python中,迭代器是一种可以记住遍历位置的对象。一个数据集合类的对象通常可以通过迭代器方式访问其内部每一个项目。迭代器有两种基本的方法:`__iter__()` ...

    python生成器和迭代器区别

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

    快速学习-Python迭代器和生成器

    14.1 迭代器生成 字符串,列表或元组对象都可用于创建迭代器 list=[1,2,3,4] it = iter(list) # 创建迭代器对象 print(next(it)) # 输出迭代器的下一个元素 print(next(it)) 14.2 迭代器遍历 list=[1,2,3,4] it =...

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

    Python是一种支持多种迭代模式的高级编程语言,其中迭代器(Iterator)和生成器(Generator)是两种非常重要的迭代机制。它们在处理数据集合时提供了不同的方法和优势。本文将深入探讨Python中的迭代器和生成器,...

    详解Python迭代和迭代器

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

    Python3 迭代器与生成器.pdf

    迭代器和生成器是 Python 中非常重要的概念,它们提供了高效处理数据集的强大工具。通过理解迭代器的工作原理及其与生成器的关系,开发者可以更加高效地编写代码,并充分利用 Python 的强大功能。无论是处理大型数据...

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

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

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

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

    python 生成器 & 迭代器.pdf

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

    Python3 迭代器与生成器.doc

    Python3 迭代器与生成器 Python 3 中的迭代器与生成器是两种强大的功能,它们可以帮助开发者高效地访问集合元素和实现复杂的迭代操作。 迭代器是 Python 中的一种对象,可以记住遍历的位置,并提供了两个基本的...

    Python迭代和迭代器详解

    总的来说,Python的迭代和迭代器机制提供了一种高效且灵活的方式来遍历数据集合,而生成器进一步简化了迭代器的创建,使我们能够在处理大量数据时保持内存效率。理解和掌握这些概念对于编写高效、内存友好的Python...

    python3实用编程技巧进阶(1套课程)\第3章-1 2PYTHON迭代器 Python课程 教程 进阶 0基础学习

    在本课程的"第3章-1 2PYTHON迭代器"中,你将学习到如何创建自定义迭代器,这通常通过定义包含`__iter__()`和`__next__()`方法的类来完成。此外,还可能涉及生成器函数,这是一种特殊的迭代器,它使用`yield`关键字来...

    Python的迭代器和生成器怎么样?_.docx

    在Python编程中,迭代器和生成器是非常重要的概念,它们在处理大量数据或无限序列时展现出强大的性能和效率。首先,我们来详细了解一下迭代器。 迭代器是Python中实现迭代器协议的对象,允许我们遍历集合中的元素,...

    测试迭代.zip,迭代器、可迭代对象、生成器、生成器表达式的实验代码

    本资源"测试迭代.zip"包含了关于迭代器、可迭代对象、生成器和生成器表达式相关的实验代码,旨在帮助Python学习者深入理解这些核心概念。 1. **可迭代对象**:在Python中,一个对象如果可以被迭代,即它可以依次...

    迭代器和生成器的区别

    迭代器和生成器的区别 迭代是一种遍历的过程,即通过for in循环语句依次从容器中取出数据的过程。...迭代器和生成器都是遍历容器的方式,但是它们之间有着本质的区别,了解这些区别对于编写高效的Python代码非常重要。

Global site tag (gtag.js) - Google Analytics