`

Python生成器

 
阅读更多

原创转载请注明出处:http://agilestyle.iteye.com/blog/2329232

 

将一个列表生成式的[]改为(),就创建了一个generator

l = [x * x for x in range(1, 6)]
print(l)

g1 = (x * x for x in range(1, 6))
print(g1)
for i in g1:
    print(i)

Console Output

 

generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误

g2 = (x * x for x in range(1, 6))
print(next(g2))
print(next(g2))
print(next(g2))
print(next(g2))
print(next(g2))
print(next(g2))

Console Output

 

使用generator定义斐波拉契数列

# 如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator
# generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。
# 而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
def fib(m):
    n, a, b = 0, 0, 1
    while n < m:
        # print(b)
        # 要把fib函数变成generator,只需要把print(b)改为yield b就可以了
        yield b
        a, b = b, a + b
        n = n + 1
    return 'done'


for i in fib(5):
    print(i)

# 用for循环调用generator时,发现拿不到generator的return语句的返回值
# 如果想要拿到返回值,必须捕获StopIteration错误,返回值包含在StopIteration的value中
g = fib(5)
while True:
    try:
        i = next(g)
        print(i)
    except StopIteration as e:
        print(e.value)
        break

Console Output

  

 


 

 

 

 

 

  • 大小: 8.6 KB
  • 大小: 11.9 KB
  • 大小: 9.1 KB
分享到:
评论

相关推荐

    Python生成器共7页.pdf.zip

    Python生成器是Python编程语言中的一个强大特性,它允许开发者创建迭代器,而无需显式地定义`__iter__`和`__next__`方法。生成器在内存管理上非常高效,因为它们按需生成值,而不是一次性生成所有数据。这在处理大量...

    Python生成器定义与简单用法实例分析

    总结来说,Python生成器是一种高效的编程工具,它使得程序能够有效地处理大量数据,而不需要占用过多的内存资源。通过生成器,我们可以构建出无限的迭代器,或者通过惰性求值逐个产生数据,从而节省内存并提高程序的...

    python 生成器 & 迭代器.pdf

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

    python生成器使用笔记.doc

    python生成器使用笔记

    Python生成器和迭代器.docx

    Python生成器和迭代器

    Python生成器表达式

    Python生成器表达式是Python编程语言中的一种高效内存管理机制,它允许程序员创建迭代器而无需定义一个完整的类。生成器表达式与列表推导式非常相似,但在内存使用和性能方面有着显著的区别。列表推导式一次性计算并...

    python生成器用法实例详解

    Python生成器是一种特殊的迭代器,它们允许我们定义一个可以暂停执行并保留其内部状态的函数。在需要时,生成器可以恢复执行并产生序列中的下一个值。生成器简化了迭代器的实现,避免了手动管理迭代状态的复杂性。 ...

    Python生成器(Generator)详解

    Python生成器,或称Generator,是一种特殊的迭代器,它的特点是其内部使用了`yield`语句,这使得生成器能够记住执行状态,并在下次调用时恢复。生成器的优势在于它们能够在运行时按需生成数据,而不是一次性生成所有...

    Python生成器深度指南:高效迭代与懒加载技巧

    在Python编程中,生成器是一种高效处理迭代数据的机制。与传统的迭代器不同,生成器使用yield关键字来产生值,而不是一次性生成所有值。这种“懒加载”的方式可以显著减少内存使用,特别是在处理大型数据集或无限...

    Python生成器的使用方法和示例代码

    ### Python生成器的使用方法与示例代码详解 #### 一、引言 在Python编程中,生成器是一种特殊的迭代器,它允许我们创建一种能够动态生成数据的函数。相比于传统的返回列表的方法,生成器更加高效,因为它并不一次...

    Python生成器以及应用实例解析

    Python生成器是编程中一种非常高效且节省内存的工具,特别是在处理大数据集或者无限序列时。它们遵循Python的迭代器协议,允许你在需要时按需生成下一个值,而不是一次性加载整个序列到内存中。生成器有两种主要形式...

    python生成器和迭代器区别

    在Python编程语言中,生成器(Generator)和迭代器(Iterator)是两种非常重要的概念,它们主要用于处理大量数据或无限序列,以节省内存资源。理解它们的区别和使用方式对于高效编程至关重要。 一、生成器 1.1 ...

    python生成器(创建生成器,执行顺序,send方法)

    Python 生成器是一种特殊的迭代器,它允许在执行过程中暂停并保存状态,使得函数能够从上次停止的地方继续执行。这种特性使得生成器在处理大量数据或者无限序列时非常高效,因为它不需要一次性生成所有元素,而是按...

    彻底搞懂Python生成器推导式

    Python生成器推导式: 生成器推导式(generator expression)的用法与列表推导式非常相似,在形式上生成器推导式使用圆括号(parentheses)作为定界符,而不是列表推导式所使用的方括号(square brackets)。 与列表...

    Python生成器next方法和send方法区别详解

    本篇文章将深入探讨Python生成器中的`next()`方法和`send()`方法,以及它们之间的区别。 首先,让我们理解`next()`方法。`next()`方法用于迭代生成器,当调用`next(g)`时,它会执行生成器函数直到遇到第一个`yield`...

    Python生成器函数

    生成器本质上也是一个迭代器,我的一点理解的话,它也有点像只能执行一轮的单链表,通过 obj.__next__()就获得了当前指针(并不是真的指针)的指向值,同时将将指针指向一下个,过程不可逆,最后一个元素执行完之后...

    简单了解Python生成器是什么

    生成器是 Python 初级开发者最难理解的概念之一,虽被认为是 Python 编程中的高级技能,但在各种项目中可以随处见到生成器的身影,你得不得去理解它、使用它、甚至爱上它。 提到生成器,总不可避免地要把迭代器拉...

Global site tag (gtag.js) - Google Analytics