Python 生成器generator

列表的问题
列表生成器可以直接创建一个表,
但是,如果一个表中有100万个元素,那么这个表太占空间,
而且往往我们仅仅需要访问前面几个元素,后面绝大多数元素占用的空间都白白浪费了。

生成器
如果列表元素可以按照某种算法推算出来,那我们可以在循环的过程中不断的推算出后续的元素。而不用一开始就创建整个list.
这样,节省了大量的空间。
这种一遍循环一遍计算的机制,称为生成器:generator.

创建生成器generator.
第一种方法:只要报一个列表生成式的[]改成(),就穿件了一个generator.
创建列表

L = [x*x for x in range(10)]
print L
#[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

创建生成器

g =(x*x for x in range(10))
for n in g:
  print n

第二种方法:用函数来实现。裂变生成式的for循环无法实现的时候,还可以用函数来实现。
如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator

def fib(m):
n, a, b = 0, 0, 1
while n < m:
    yield b
    a, b = b, a + b
    n = n + 1
    return

在生成器中,不允许return后面带任何参数。否则:SyntaxError: ‘return‘ with argument inside generator
因为在生成器中,return会引起StopIterationError。 一般生成器也不通过这种return的方式返回值。

函数生成器的工作原理:
函数定义中包含yield关键字那么函数就变成了生成器。在生成器执行过程中,遇到yield就中断,下次又继续从中断点后执行。
函数形式定义的生成器一般不会用next()来获取下一个返回值。而是直接用for循环来迭代。

时间: 2024-07-31 13:01:57

Python 生成器generator的相关文章

【25】Python生成器generator

列表生成式一个小题目:将里列表[0,1,2,3]里面的数值都加1.方法1: a=[0,1,2,3] b=[] for i in range(len(a)): b.append(i+1) a=b print(a) 方法2: a = [1,3,4,6,7,7,8] for index,i in enumerate(a): a[index] +=1 print(a) 方法3: a=[0,1,2,3,4] a=map(lambda x:x+1,a) print(a) for i in a: print(

python生成器 Generator

生成器 Generator 什么是生成器? 生成器是能够动态提供数据的可迭代对象 生成器在程序运行时生成数据,与容器类不同,它通常不会在内存中保存大量的数据,而是现用现生成 生成器有两种: 生成器函数 生成器表达式 生成器函数 含有yield语句的函数是生成器函数,此函数被调用将返回一个生成器对象 注: yield翻译为(产生或生成) yield 语句 语法: yield 表达式 说明: yield 用于 def函数中,目的是将此函数作用生成器函数使用yield 用来生成数据,供迭代器的next

python 生成器 generator

一.生成器定义 通过列表生成表达式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间.在Python中,这种一边循环一边计算的机制,称为生成器:generator. 1 >>> l = [x * x for x in range(10)] 2 >>> l 3 [0, 1, 4, 9, 16, 25, 36,

Python高级编程之生成器(Generator)与coroutine(一):Generator

这是一系列的文章,会从基础开始一步步的介绍Python中的Generator以及coroutine(协程)(主要是介绍coroutine),并且详细的讲述了Python中coroutine的各种高级用法,最后会用coroutine实现一个简单的多任务的操作系统. 其实也是看完这篇文章的学习笔记吧!O(∩_∩)O 生成器(Generator) 什么是生成器?在Python中,生成器(Generator)是一个带有yield关键字的函数 1 def gene(): 2 a = 1 3 print "

Python高级编程之生成器(Generator)与coroutine(二):coroutine介绍

原创作品,转载请注明出处:点我 上一篇文章Python高级编程之生成器(Generator)与coroutine(一):Generator中,我们介绍了什么是Generator,以及写了几个使用Generator Function的示例,这一小节,我们会介绍Python的coroutine,以及会有一个小例子,再接下来的文章中会以代码的形式一步步介绍coroutine的高级用法. coroutine(协程) 什么是coroutine?coroutine跟Generator有什么区别?下面先看一段

python学习--生成器Generator

生成器函数:在函数中如果出现了yield关键字,那么这个函数就是生成器函数,yield的作用就是生成一个generator,生成器函数返回一个生成器. 实现一个generator:1.把列表的[ ]换成(),就创建了一个generator. >>> L = [x * x for x in range(10)] >>> L [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>> g = (x * x for x in range

Python之生成器(generator)和迭代器(Iterator)

generator 生成器generator:一边循环一边计算的机制. 生成器是一个特殊的程序,可以被用于控制循环的迭代行为.python中的生成器是迭代器的一种,使用yield返回值函数,每次调用yield会暂停,可以使用next()函数和send()函数恢复生成器. 生成器类似于返回值为数组的一个函数,这个函数可以接受参数,可以被调用.但是,不同于一般函数会一次性返回包括了所有数值的数组,生成器一次只能产生一个值,这个消耗的内存数量将大大减小.因此,生成器看起来像是一个函数,但是表现得像迭代

Python高级编程之生成器(Generator)与coroutine(四):一个简单的多任务系统

啊,终于要把这一个系列写完整了,好高兴啊 在前面的三篇文章中介绍了Python的Python的Generator和coroutine(协程)相关的编程技术,接下来这篇文章会用Python的coroutine技术实现一个简单的多任务的操作系统 代码如下,可看注释 1 #-*-coding:utf-8 -*- 2 ''' 3 用Python和coroutine实现一个简单的多任务系统 4 ''' 5 # ##Step 1:Define Tasks###########################

Python 生成器&迭代器

Python 生成器 带有 yield 的函数在 Python 中被称之为 generator(生成器),用斐波那契数列: def fab(max):     n, a, b = 0, 0, 1     while n < max:         yield b         a, b = b, a + b         n = n + 1 执行: 1 2 3 4 5 6 7 8 9 >>> for n in fab(5):     print n 1 1 2 3 5 简单地