Python 生成器

1.生成器创建方式

1.1  (x*2 for x in  range(10))

1.2 yield关键字

def  foo(): #生成器对象
    print ('ok')
    yield 1
    print ('ok2')
    yield 2
g=foo() #生成器对象
#print(g) 
#next(g)  1
#next(g)  2
#next(g)  报错
for i in foo():
    print(i)

for循环in后跟着的是  可迭代对象(对象拥有iter方法的)

1 def fibo(max):
2     n,before,after=0,0,1
3     while (n<max)
4         yield before
5         before,after=after,before+after
6         n+=1    
7 fibo(8) #生成器对象

生成器内置send函数的使用,与next()函数类似,均进入生成器函数执行代码,并返回值,但是当第一次send函数调用前没有next()函数,只能传递none参数,即fibo(8).send(none)

 

def foo():
    print('ok1')
    count= yield 1 #count值为'eeee'
    print(count)
    print('ok2')
    yield 2

g=foo()
next(g) #等价于 g.send(None) 第一次进入生成器时,不给yield指向变量赋值  打印值为 1

a=g.send('eeee')
print(a) #打印值为2

 

 yield 停止执行之后代码,返回生成器调用处,再次调用时,从上次地方继续执行。

 

posted on 2018-01-12 21:21  可爱的春哥  阅读(115)  评论(0)    收藏  举报

导航