生成器

###列表生成式
[ i * 2 for i in range(10) ]
##>>>输出是[0,2,4,6,8,10,12,14,16,18]
##也是也可以用于函数
[ func(i) for i in range(10) ]

###[ i * 2 for i in range(10) ] 的输出结果和:
a = []
for i in range(10):
    a.append(i*2)
##的结果是一样的

 生成器

###生成器的创建和列表生成式式差不多的,不一样的是列表生成式是用[],生成器的的创建是用()来创建的
##比如:
c=( i * 2 for i in range(100) )
##这样就创建好了生成器

##生成器的概念
1.生成器只有在调用时才会生成相应的数据,只记录当前的位置
2.只有c.__next__()取值,只有一个方法,而且只能一个一个的取,不能往会取值
###斐波那契数
def fid(max)
    n,a,b = 0,0,1
    while n<max:
        print(b)
        a,b  = b , a+b
        n += 1
  renturn "done"
fid(100)

 

###斐波那契数生成式
def fib(max):
    n,a,b = 0,0,1
    while n<max:
        yield b  ###和上面的差别在这里
        a,b = b , a+b

fib=  fib(100)
print(fib.__next__())
print(fib.__next__())

 

生成器send()
def
consumer(name) print("%s准备吃包子了"%name) while True: baozi = yield print("[%s]包子来了,[%s]吃吧"% (baozi,name)) c = consumer("Caicai") c.__next__()###只能调用,不能传值 c.send("韭菜")###通过send()向生成器中的yield传一个值进去

 

posted @ 2018-04-24 19:07  Caionk  阅读(167)  评论(0编辑  收藏  举报