生成器

一.列表生成式

a = [i*2 for i in range(10)]

1.不用中间值进行赋值

  斐波拉齐数列

a,b=b,a+b

   注意:不是这样理解

      a=b  a=1,b=2,a=b,a=2,b=a+b=4

  而是:t=(b,a+b) //t是一个tuple

    a=t[0]   b=t[1]

二.生成器

  生成器的实质:按一种规律或有规则的方式,当用户需要该数据时通过__next__()进行生成,不能进行切片。

  特点:占用的内存空间小,如:生成10000个数,用列表是将每一个数据写入内存后,用户才能使用,但生成器是要用时才生成

  生成器创建方法:

  1.  a = (i *2 for i in range (10))

  2.函数方式用yield,此时的函数不在是函数而是一个生成器

  yield 的作用:停止并返回yield右边的值,再跳出去执行外面的代码,当外面用到__next__(),后又会跳回到生成器中的yield处执行下部分。

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

      3.send(信息)    有__next__()的作用同时还有将send中的信息发给yield

import time
def comsuer(name):
    print("%s 准备开吃了"%name)
    while True:
        ret=yield
        print("[%s]正在吃[%s]的包子"%(name,ret))


a=["豆沙馅","白菜馅","猪肉馅","韭菜馅"]


def produce(name):
    c=comsuer("小芳")
    c1=comsuer("小红")
    c.__next__()
    c1.__next__()
    print("%s正在包子,,,"%name)
    for i in a:
        time.sleep(1)
        c.send(i)
        c1.send(i)


produce("高佳雪")
原文地址:https://www.cnblogs.com/gjx1212/p/11581091.html