python生成器 Generator

生成器 Generator

  什么是生成器?
    生成器是能够动态提供数据的可迭代对象
    生成器在程序运行时生成数据,与容器类不同,它通常不会在内存中保存大量的数据,而是现用现生成

  生成器有两种:
    生成器函数
    生成器表达式

  生成器函数
    含有yield语句的函数是生成器函数,此函数被调用将返回一个生成器对象
    注: yield翻译为(产生或生成)

  yield 语句
    语法:
      yield 表达式
    说明:
      yield 用于 def函数中,目的是将此函数作用生成器函数使用yield 用来生成数据,供迭代器的next(it) 函数使用

    说明:
      生成器函数的调用将返回一个生成器对象,生成器对象是一个可迭代对象
      生成器函数调用return会触发一个StopIteration异常,即生成数据结束

  生成器表达式
    语法:
      ( 表达式 for 变量 in 可迭代对象 [if 真值表达式] )
    说明:
      if 子句可以省略
    作用:
      用推导式形式创建一个新的生成器

    示例:
      gen = (x**2 for x in range(1, 5))
      it = iter(gen)
      next(it) # 1
      next(it) # 4
      next(it) # 9
      next(it) # 16
      next(it) # StopIteration

  列表推导式和生成器表达式的区别:
    推导式会创建容器,容器中已有数据
    生成器表达式创建的生成器没有数据,在调用时会自动生成

  示例:
    for x in [x**2 for x in range(1000000000000)]:
      print(x)

    for x in (x**2 for x in range(1000000000000)):
      print(x)

  看下列函数的输出结果是什么?为什么?
  第一个程序
    L = [2, 3, 5, 7]
    A = [x * 2 for x in L]
    it = iter(A)
    print(next(it)) # 4
    L[1] = 333
    print(next(it)) # 6
  第二个程序
    L = [2, 3, 5, 7]
    A = (x * 2 for x in L)
    it = iter(A)
    print(next(it)) # 4
    L[1] = 333
    print(next(it)) # 666

  迭代工具函数
  zip(iter1, iter2, ....) 返回一个zip生成器对象,此对象用于生成一个元组,此元组的数据分别来自于参数中的每个可迭代对象,生成元组的个数由最小的一个可迭代对象大小决定enumerate(iterable, start=0) 返回一个 enumerate生成器对象,此对象生成类型为(索引,值)对的元组,默认索引从0
开始,也可以用start指定

  zip

  numbers = [10086, 10000, 10010, 95588]
  names = [‘中国移动‘, ‘中国电信‘, ‘中国联通‘]

  for t in zip(numbers, names):
    print(t) # 打印 (10086, ‘中国移动‘), .....

  for num, name in zip(numbers, names):
    print(name, ‘的客服电话是:‘, num)

  for t in zip(names, numbers, range(1, 100)):
    print(t) # (‘中国移动‘, 10086, 1), ...

  enumerate.py

  names = [‘中国移动‘, ‘中国电信‘, ‘中国联通‘]

  for t in enumerate(names):
    print(t) # (0, ‘中国移动‘), (1, ‘中国电信‘) ....

  for t in enumerate(names, 1111):
    print(t)# (1111, ‘中国移动‘), (1112, ‘中国电信‘) ....

原文地址:https://www.cnblogs.com/zhaoyang1997/p/10585882.html

时间: 2024-10-01 07:51:34

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

列表的问题列表生成器可以直接创建一个表,但是,如果一个表中有100万个元素,那么这个表太占空间,而且往往我们仅仅需要访问前面几个元素,后面绝大多数元素占用的空间都白白浪费了. 生成器如果列表元素可以按照某种算法推算出来,那我们可以在循环的过程中不断的推算出后续的元素.而不用一开始就创建整个list.这样,节省了大量的空间.这种一遍循环一遍计算的机制,称为生成器:generator. 创建生成器generator.第一种方法:只要报一个列表生成式的[]改成(),就穿件了一个generator.创建

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 简单地