1. 程式人生 > >014生成器(重點)

014生成器(重點)

bject 生成 before img count 可叠代對象 一次 for tor

##補充:列表生成器

技術分享圖片
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生成器(重點)