知识背景:
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 迭代器与生成器 python 迭代器与生成器 python 迭代器与生成器 python 迭代器与生成器
python 迭代器与生成器
python 迭代器与生成器
python 迭代器与生成器
「Python系列」Python迭代器与生成器
总结起来,迭代器和生成器都是Python中处理序列的有效工具。迭代器提供了一种方便的方式来遍历任何可迭代对象,而生成器则在节省内存和提高效率方面表现出色,尤其适用于处理大数据集或无限序列。理解并熟练运用这两...
内容概要:本文详细介绍了 Python 中的迭代器和生成器的概念、创建方法及其应用场景。首先解释了迭代器的基本概念、创建方法以及应用场景,如处理大型数据集和实现自定义遍历逻辑。接着介绍了生成器的概念,展示了...
在Python中,迭代器和生成器是两个用于处理序列数据的重要概念。它们允许你以高效且节省内存的方式处理大量数据。以下是它们的基本概念和用法。 迭代器(Iterator) 迭代器是一个对象,它实现了两个方法:__iter__()...
压缩包内的文件“Python 高级编程-[0001]-[Python 迭代器 iteraor].docx”可能是一个详细的教程,涵盖了迭代器的高级用法,可能包括生成器(generator)——这是Python特有的迭代器实现,它们允许我们创建惰性计算的...
### 深入讲解Python中的迭代器和生成器 #### 一、迭代器的基本概念 在Python编程语言中,迭代器是一种遵循特定协议的对象,它允许我们遍历一系列数据项。这种遍历方式广泛应用于各种数据结构,如列表(list)、...
### Python迭代器与生成器详解 #### 手动创建迭代器 在Python中,迭代器是一种可以记住遍历位置的对象。一个数据集合类的对象通常可以通过迭代器方式访问其内部每一个项目。迭代器有两种基本的方法:`__iter__()` ...
总的来说,生成器和迭代器是Python中实现迭代的关键工具,它们提供了优雅地处理序列数据的方式,尤其是处理大型数据集时,可以避免一次性加载全部数据导致的内存问题。熟练掌握这两者的使用,能极大地提高Python编程...
迭代器是一种可以记住遍历位置的对象,支持for循环和next()函数,而生成器是一种特殊的迭代器,使用yield语句产生值,支持惰性计算和动态控制迭代过程。文章还提供了迭代器和生成器的示例代码,帮助读者更好地理解和...
python 迭代器与生成器-7.打印学生平均成绩——emm~.py
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 迭代器与生成器-5.字节串和字符串互转——python的函数库 大!.py
python 迭代器与生成器-4.0取出字符串日期中的月份并加一——明月何时.py
Python是一种支持多种迭代模式的高级编程语言,其中迭代器(Iterator)和生成器(Generator)是两种非常重要的迭代机制。它们在处理数据集合时提供了不同的方法和优势。本文将深入探讨Python中的迭代器和生成器,...
在Python编程语言中,迭代和迭代器是两个非常重要的概念,它们在处理数据集合时扮演着核心角色。本文将深入探讨这两个概念,并通过实例来帮助理解。 首先,我们需要理解什么是可迭代对象。在Python中,可迭代对象是...