`

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生成器使用笔记.doc

    python生成器使用笔记

    Python生成器共7页.pdf.zip

    Python生成器共7页.pdf.zip

    浅析Python生成器.pdf

    浅析Python生成器

    python 生成器 & 迭代器.pdf

    python 生成器 & 迭代器

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

    python生成器(generator):是一种特殊的迭代器,优势是可以在运行中途改变函数里的参数。 如何判断一个对象是否是一个生成器: from _collections_abc import generator list_num = (x for x in range(10)) print...

    python生成器的pdf

    范德法你字啊健康的时间福克斯地方上的丰富的说法都是

    python生成器用法实例详解

    本文实例讲述了python生成器用法。分享给大家供大家参考,具体如下: 1. 生成器 利用迭代器,我们可以在每次迭代获取数据(通过next()方法)时按照特定的规律进行生成。但是我们在实现一个迭代器时,关于当前迭代到...

    彻底搞懂Python生成器推导式

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

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

    本文研究的主要是Python生成器及其应用,具体如下。 一、定义 可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他的数据类型需要调用自己内置的__iter__方法),所以生成器就是可迭代对象 二、生成器...

    python生成器和迭代器区别

    一、生成器 1.1 什么是生成器 generator:一边生成一边计算后面元素的机制,称为生成器,生成器里面保存的是算法,只有需要用到才会计算后面的值 1.2 通过列表生成式创建生成器 我们可以将列表生成式的中括号改成小...

    Python生成器(Generator)详解

    主要介绍了Python生成器(Generator)详解,本文讲解了什么是生成器、简单生成器、带yield 语句的生成器、加强的生成器等内容,需要的朋友可以参考下

    python生成器表达式和列表解析

    最近在学习python的过程中,对列表解析及生成器表达式有点疑惑。从表面上看,两者很相似,只有一点不同:列表解析采用中括号[]来包含,生成器表达式采用小括号()来...本文我们就来详细看下python生成器表达式和列表解析

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

    今天小编就为大家分享一篇关于Python生成器的使用方法和示例代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    Python生成器函数

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

    Python生成器表达式

    生成器表达式 #生成器表达式 g1 = (i for i in range(10)) print(g1) # for i in g1: print(i, end=' ') print() # 0 1 2 3 4 5 6 7 8 9 # 注意这时候生成器g1已经被用完了,就是指针已经走到了末尾,无法再__next...

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

    主要介绍了Python生成器next方法和send方法区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Python生成器generator用法示例

    本文实例分析了Python生成器generator用法。分享给大家供大家参考,具体如下: 生成器generator本质是一个函数,它记住上一次在函数体中的位置,在生成器函数下一次调用,会自动找到该位置,局部变量都保持不变 l =...

    简单了解Python生成器是什么

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

Global site tag (gtag.js) - Google Analytics