014生成器(重点)

##补充:列表生成器  

1 #两个理解例子
2 a=[x**2   for  x  in  range(10)]            #取x,然后执行x**2,在存放到列表里面
3 print(a)          #[0,1,4,9,16,25,36,49,64,81]
4 
5 def  f(n):
6     return   n**2
7 a=[f(x)   for  x   in  range(10)]    #取x,然后执行x**2,在存放到列表里面
View Code

##生成器

1 s=(x**2  for  x  in  range(2,10))  #s就是一个生成器对象,生成器里面没有数据,只有调用才会有数据产生
2 print(s)   #<generatorobject<genexpr>at0x0000025383953F10>
3 print(s.__next__())   #不用这个
4 print(next(s))   #用这个
5 for  i  in  s:
6 
7 print(i)
View Code

上面是第一种创建方式
第二种使用yield创建

 1 def  f():
 2     print('ook')
 3     yield   1
 4     print('koo')
 5     yield   2
 6 g=f()
 7 print(g)     #  <generatorobjectfat0x000001F2049F3F10>没有显示ok,没有执行print。
 8 print(next(g))  #  调用next才会执行print
 9 
10 print(next(g))
View Code

补充:可迭代对象,内部有iter方法
生成器使用

1 def  fib(max):
2     n, before, after = 0, 0, 1
3 while  n  <  max:
4     before, after = after, before+after
5     n += 1
6     yield  after
7 generator = fib(25)
8 for i  in  generator:
9     print(i,end='  ')
View Code
 1 def   fib(max):
 2     n, before, after = 0, 0, 1
 3     while  n < max:
 4     before, after = after, before + after
 5     n += 1
 6     count = yield  after
 7     print(count)
 8 generator = fib(25)
 9 print(generator.send(None))#next(b),第一次send前如果没有next,只能传None
10 print(generator.send('aiq'))
View Code

##通过yield伪并发,非重点,看明白就行(没有找到例子)视频。博客主要是我整理知识所用,所以我理解了,就没有再去找例子了

 

posted @ 2017-12-26 23:55  Alos403  阅读(243)  评论(0编辑  收藏  举报