原创转载请注明出处: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
相关推荐
python生成器使用笔记
Python生成器共7页.pdf.zip
浅析Python生成器
python 生成器 & 迭代器
python生成器(generator):是一种特殊的迭代器,优势是可以在运行中途改变函数里的参数。 如何判断一个对象是否是一个生成器: from _collections_abc import generator list_num = (x for x in range(10)) print...
范德法你字啊健康的时间福克斯地方上的丰富的说法都是
本文实例讲述了python生成器用法。分享给大家供大家参考,具体如下: 1. 生成器 利用迭代器,我们可以在每次迭代获取数据(通过next()方法)时按照特定的规律进行生成。但是我们在实现一个迭代器时,关于当前迭代到...
Python生成器推导式: 生成器推导式(generator expression)的用法与列表推导式非常相似,在形式上生成器推导式使用圆括号(parentheses)作为定界符,而不是列表推导式所使用的方括号(square brackets)。 与列表...
本文研究的主要是Python生成器及其应用,具体如下。 一、定义 可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他的数据类型需要调用自己内置的__iter__方法),所以生成器就是可迭代对象 二、生成器...
一、生成器 1.1 什么是生成器 generator:一边生成一边计算后面元素的机制,称为生成器,生成器里面保存的是算法,只有需要用到才会计算后面的值 1.2 通过列表生成式创建生成器 我们可以将列表生成式的中括号改成小...
主要介绍了Python生成器(Generator)详解,本文讲解了什么是生成器、简单生成器、带yield 语句的生成器、加强的生成器等内容,需要的朋友可以参考下
最近在学习python的过程中,对列表解析及生成器表达式有点疑惑。从表面上看,两者很相似,只有一点不同:列表解析采用中括号[]来包含,生成器表达式采用小括号()来...本文我们就来详细看下python生成器表达式和列表解析
今天小编就为大家分享一篇关于Python生成器的使用方法和示例代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
生成器本质上也是一个迭代器,我的一点理解的话,它也有点像只能执行一轮的单链表,通过 obj.__next__()就获得了当前指针(并不是真的指针)的指向值,同时将将指针指向一下个,过程不可逆,最后一个元素执行完之后...
生成器表达式 #生成器表达式 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生成器generator用法。分享给大家供大家参考,具体如下: 生成器generator本质是一个函数,它记住上一次在函数体中的位置,在生成器函数下一次调用,会自动找到该位置,局部变量都保持不变 l =...
生成器是 Python 初级开发者最难理解的概念之一,虽被认为是 Python 编程中的高级技能,但在各种项目中可以随处见到生成器的身影,你得不得去理解它、使用它、甚至爱上它。 提到生成器,总不可避免地要把迭代器拉...