国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python yield和Generator函數(shù)用法詳解

2020-02-15 21:18:13
字體:
供稿:網(wǎng)友

這篇文章主要介紹了python yield和Generator函數(shù)用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

首先我們從一個小程序?qū)耄鞫ㄒ粋€list,找出其中的素數(shù),我們會這樣寫

import mathdef is_Prims(number):  if number == 2:    return True  //除2以外的所有偶數(shù)都不是素數(shù)  elif number % 2 == 0:    return False  //如果一個數(shù)能被除1和本身之外的數(shù)整除,則為合數(shù)。其實我們的判定范圍到根號n就可以  for cur in range(2,int(math.sqrt(number))+1,2):    if number % cur == 0:      return False    else:      return Truedef get_Prims(input_list):  result_list = list()  for element in input_list:    if is_Prims(element):      result_list.append(element)  return result_listaa = get_Prims([1,2,3,4,5,6,7,8,9])print (aa)

但如果我們想給定一個數(shù),然后列出比這個數(shù)大的所有素數(shù)呢?我們可能這樣寫:

def get_Prims(number):  if is_Prims(number):    return number

但是一旦return函數(shù)將控制權(quán)交給調(diào)用者后徹底結(jié)束,任何局部變量和函數(shù)工作都被丟棄,下一次調(diào)用又會從頭開始。因此我們就可以用一下寫法:

def get_Prims(number):  while(True):    if is_Prims(number):      yield number    number += 1def get_numbers():  total = list()  for next_prim in get_Prims(2):    if next_prim < 100:      total.append(next_prim)    else:      print(total)      returnget_numbers()

下面解釋一下generator函數(shù),一個函數(shù)的def代碼里包含了yield,函數(shù)就自動成為了一個generator函數(shù)(及時仍包含有return),generator函數(shù)創(chuàng)建generator(一種特殊形式的迭代器,這個迭代器有一個內(nèi)置__next__()方法),當需要一個值的時候通過yield來產(chǎn)生而不是直接return,因此與一般函數(shù)不同的是,此時控制權(quán)并未交出。

for循環(huán)會隱式的調(diào)用next()函數(shù),next()函數(shù)負責調(diào)用generator中的__next__()方法,此時generator負責返回一個值給任何調(diào)用next()的方法,利用yield將此值傳回去,相當于return語句。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持武林站長站。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 潜山县| 怀仁县| 观塘区| 美姑县| 方山县| 胶州市| 固镇县| 丹寨县| 赤城县| 遂川县| 成安县| 马边| 梅河口市| 竹溪县| 平舆县| 龙南县| 嘉定区| 盘山县| 新巴尔虎右旗| 彭州市| 无棣县| 佛学| 徐闻县| 顺昌县| 房产| 云霄县| 安丘市| 耒阳市| 弥勒县| 班戈县| 麟游县| 巴楚县| 云安县| 开化县| 扶余县| 湘西| 甘南县| 诸暨市| 远安县| 平山县| 凤阳县|