码迷,mamicode.com
首页 > 其他好文 > 详细

014生成器(重点)

时间:2017-12-27 00:17:30      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:opened   迭代   splay   并发   方式   技术分享   图片   int   理解   

##补充:列表生成器  

技术分享图片
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伪并发,非重点,看明白就行(没有找到例子)视频。博客主要是我整理知识所用,所以我理解了,就没有再去找例子了

 

014生成器(重点)

标签:opened   迭代   splay   并发   方式   技术分享   图片   int   理解   

原文地址:https://www.cnblogs.com/-nbloser/p/8120673.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!