99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

python之yield和Generator

發(fā)布時(shí)間:2017-03-09 12:25  回復(fù):0  查看:2695   最后回復(fù):2017-03-09 12:25  
本文和大家分享的主要是python yield Generator相關(guān)內(nèi)容,一起來(lái)看看吧,希望對(duì)大家 學(xué)習(xí)python有所幫助。
  首先我們從一個(gè)小程序?qū)?,各定一個(gè)list ,找出其中的素?cái)?shù),我們會(huì)這樣寫
   import math def  is_Prims(number):
   if number == 2:
   return  True
  // 2 以外的所有偶數(shù)都不是素?cái)?shù)
   elif number % 2 == 0:
   return  False
  // 如果一個(gè)數(shù)能被除 1 和本身之外的數(shù)整除,則為合數(shù)。其實(shí)我們的判定范圍到根號(hào) n 就可以
   for cur  in range(2,int(math.sqrt(number))+1,2):
   if number % cur == 0:
   return  False
   else:
   return  True
   def  get_Prims(input_list):
  result_list = list()
   for element  in input_list:
   if is_Prims(element):
  result_list.append(element)
   return result_list
  aa = get_Prims([1,2,3,4,5,6,7,8,9]) print (aa)
  但如果我們想給定一個(gè)數(shù),然后列出比這個(gè)數(shù)大的所有素?cái)?shù)呢?我們可能這樣寫:
   def  get_Prims(number):
   if is_Prims(number):
   return number
  但是一旦return 函數(shù)將控制權(quán)交給調(diào)用者后徹底結(jié)束,任何局部變量和函數(shù)工作都被丟棄,下一次調(diào)用又會(huì)從頭開(kāi)始。因此我們就可以用一下寫法:
   def  get_Prims(number):
   while( True):
   if is_Prims(number):
   yield number
  number += 1
   def  get_numbers():
  total = list()
   for next_prim  in get_Prims(2):
   if next_prim < 100:
  total.append(next_prim)
   else:
  print(total)
   return
  get_numbers()
  下面解釋一下generator 函數(shù),一個(gè)函數(shù)的 def 代碼里包含了 yield, 函數(shù)就自動(dòng)成為了一個(gè) generator 函數(shù)(及時(shí)仍包含有 return ), generator 函數(shù)創(chuàng)建 generator (一種特殊形式的迭代器,這個(gè)迭代器有一個(gè)內(nèi)置 __next__() 方法),當(dāng)需要一個(gè)值的時(shí)候通過(guò) yield 來(lái)產(chǎn)生而不是直接 return ,因此與一般函數(shù)不同的是,此時(shí)控制權(quán)并未交出。
  for 循環(huán)會(huì)隱式的調(diào)用 next() 函數(shù), next() 函數(shù)負(fù)責(zé)調(diào)用 generator 中的 __next__() 方法,此時(shí) generator 負(fù)責(zé)返回一個(gè)值給任何調(diào)用 next() 的方法,利用 yield 將此值傳回去,相當(dāng)于 return 語(yǔ)句。
來(lái)源: 博客園

您還未登錄,請(qǐng)先登錄

熱門帖子

最新帖子

?