最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python 生成器,迭代,yield關(guān)鍵字,send()傳參給yield語句操作示例

 更新時間:2019年10月12日 11:18:47   作者:houyanhua1  
這篇文章主要介紹了Python 生成器,迭代,yield關(guān)鍵字,send()傳參給yield語句操作,結(jié)合實例形式分析了Python生成器、迭代、yield關(guān)鍵字及異常處理相關(guān)操作技巧,需要的朋友可以參考下

本文實例講述了Python 生成器,迭代,yield關(guān)鍵字,send()傳參給yield語句操作。分享給大家供大家參考,具體如下:

demo.py(生成器,yield關(guān)鍵字):

# 生成器是一個特殊的迭代器??梢杂胒or...in遍歷。
# 帶有yield關(guān)鍵字的函數(shù),不再是一個函數(shù),而是一個生成器模板。調(diào)用該模板會返回一個生成器對象。
def create_num(all_num):
  a, b = 0, 1
  current_num = 0
  while current_num < all_num:
    yield a  # 當(dāng)遍歷create_num返回的生成器時,會阻塞在yield的位置。每次遍歷出的值都是yield后的值。
    a, b = b, a+b
    current_num += 1
  # return '返回值'  # 迭代結(jié)束后,繼續(xù)調(diào)用next會拋StopIteration異常。 可以通過該異常來獲取該返回值。 (異常.value 就是該返回值)
# create_num"函數(shù)"中有一個yield,那么create_num不再是一個函數(shù)。調(diào)用時,會返回一個生成器對象。
obj = create_num(10) # 只會返回一個生成器對象(可用于遍歷)。并不會執(zhí)行create_num中的代碼,只有遍歷(迭代)時才會執(zhí)行create_num中的代碼。
ret = next(obj) # 迭代的本質(zhì)就是調(diào)用對象的__next__函數(shù)。 會返回yield后面的值,并阻塞代碼,直到再次調(diào)用next(或迭代)才會解阻塞。
print(ret)  # 當(dāng)create_num中的代碼執(zhí)行完后,迭代就會結(jié)束。
ret = next(obj) # 如果迭代結(jié)束后,繼續(xù)調(diào)用next,那么會拋異常。 可以通過異常來獲取create_num return的值。
print(ret)  # 可以通過異常來判斷是否迭代結(jié)束。
obj2 = create_num(2) # obj2和obj的遍歷迭代互不影響。
ret = next(obj2)
print(ret)
# for num in obj:
#  print(num)

運(yùn)行結(jié)果:

0
1
0

demo.py(通過異常判斷迭代是否結(jié)束):

def create_num(all_num):
  a, b = 0, 1
  current_num = 0
  while current_num < all_num:
    yield a 
    a, b = b, a+b
    current_num += 1
  return "ok...."  # 通過迭代結(jié)束后的異常來獲取該返回值
obj = create_num(10) # 返回一個生成器對象。并不會執(zhí)行create_num中的代碼,只有遍歷迭代obj時才會執(zhí)行create_num中的代碼
while True:
  try:
    ret = next(obj) # 迭代結(jié)束后繼續(xù)調(diào)用next會拋異常。
    print(ret)
  except Exception as ret:
    print(ret.value) # 通過異常獲取create_num return的值。
    break

運(yùn)行結(jié)果:

0
1
1
2
3
5
8
13
21
34
ok....

demo.py(send()迭代生成器,傳參給yield語句):

def create_num(all_num):
  a, b = 0, 1
  current_num = 0
  while current_num < all_num:
    ret = yield a  # send的參數(shù)就是yield語句的返回值。
    print(">>>ret>>>>", ret)  # hahahha
    a, b = b, a+b
    current_num += 1
obj = create_num(10)
# obj.send(None) # send一般不會放到第一次啟動(迭代)生成器,如果非要這樣做 那么傳遞None (否則會拋異常)
ret = next(obj) # 第一次遍歷迭代生成器時,建議使用next函數(shù)。
print(ret)
# send與next作用相同,都是進(jìn)行下一次迭代的意思。 (都會解阻塞yield關(guān)鍵字)
# send可以傳遞參數(shù)表示yield語句的返回值。 而next不能傳遞參數(shù)。
ret = obj.send("hahahha") # 會先將"hahahha"參數(shù)當(dāng)做yield語句的返回值,然后再解阻塞yield 遍歷。(因此不推薦第一次遍歷時使用send傳參) 
print(ret)

運(yùn)行結(jié)果:

0
>>>ret>>>> hahahha
1

創(chuàng)建生成器的簡單方式:

更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程

希望本文所述對大家Python程序設(shè)計有所幫助。

相關(guān)文章

  • Python手寫回歸樹的實現(xiàn)

    Python手寫回歸樹的實現(xiàn)

    本文主要介紹了Python手寫回歸樹的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • django將數(shù)組傳遞給前臺模板的方法

    django將數(shù)組傳遞給前臺模板的方法

    今天小編就為大家分享一篇django將數(shù)組傳遞給前臺模板的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 使用Python的turtle模塊畫國旗

    使用Python的turtle模塊畫國旗

    這篇文章主要為大家詳細(xì)介紹了用Python的turtle模塊畫國旗,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 基于Python實現(xiàn)帕累托圖的示例詳解

    基于Python實現(xiàn)帕累托圖的示例詳解

    帕累托圖是一種特殊的直方圖, 在項目管理知識體系中屬于質(zhì)量管理的工具。本文為大家整理了Python實現(xiàn)帕累托圖的方法,需要的可以參考一下
    2023-03-03
  • Pycharm安裝Qt Design快捷工具的詳細(xì)教程

    Pycharm安裝Qt Design快捷工具的詳細(xì)教程

    這篇文章主要介紹了Pycharm安裝Qt Design快捷工具,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Python3實現(xiàn)監(jiān)控新型冠狀病毒肺炎疫情的示例代碼

    Python3實現(xiàn)監(jiān)控新型冠狀病毒肺炎疫情的示例代碼

    這篇文章主要介紹了Python3實現(xiàn)監(jiān)控新型冠狀病毒肺炎疫情的示例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • 使用Python簡單實現(xiàn)去除彩色水印

    使用Python簡單實現(xiàn)去除彩色水印

    這篇文章主要為大家詳細(xì)介紹了如何使用Python簡單實現(xiàn)去除彩色水印效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02
  • Ubuntu18.04中Python2.7與Python3.6環(huán)境切換

    Ubuntu18.04中Python2.7與Python3.6環(huán)境切換

    這篇文章主要為大家詳細(xì)介紹了Ubuntu18.04中Python2.7與Python3.6環(huán)境切換,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • python實戰(zhàn)之德州撲克第二步-判斷牌型

    python實戰(zhàn)之德州撲克第二步-判斷牌型

    這篇文章主要介紹了python實戰(zhàn)之德州撲克第二步-判斷牌型,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • 在PyCharm中實現(xiàn)關(guān)閉一個死循環(huán)程序的方法

    在PyCharm中實現(xiàn)關(guān)閉一個死循環(huán)程序的方法

    今天小編就為大家分享一篇在PyCharm中實現(xiàn)關(guān)閉一個死循環(huán)程序的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11

最新評論

阜阳市| 遂平县| 堆龙德庆县| 咸丰县| 清涧县| 清远市| 明光市| 伊宁市| 自治县| 桂林市| 邵阳市| 灵寿县| 达州市| 锦州市| 江陵县| 平利县| 德惠市| 茂名市| 卢龙县| 抚顺市| 中方县| 定边县| 德昌县| 精河县| 怀化市| 资中县| 大足县| 潢川县| 漳平市| 霍林郭勒市| 南溪县| 蚌埠市| 涞源县| 丹棱县| 隆德县| 新乡市| 克什克腾旗| 体育| 德保县| 东台市| 磐石市|