麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Python > 正文

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

2019-11-02 14:08:24
字體:
來源:轉載
供稿:網友

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

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

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

運行結果:

0
1
0

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

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...."  # 通過迭代結束后的異常來獲取該返回值obj = create_num(10) # 返回一個生成器對象。并不會執行create_num中的代碼,只有遍歷迭代obj時才會執行create_num中的代碼while True:  try:    ret = next(obj) # 迭代結束后繼續調用next會拋異常。    print(ret)  except Exception as ret:    print(ret.value) # 通過異常獲取create_num return的值。    break

運行結果:

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

運行結果:

0
>>>ret>>>> hahahha

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 好吊色37pao在线观看 | 精品一区二区三区免费视频 | av不卡免费观看 | 国产成人高清在线观看 | 色婷婷久久久 | 日本精品一区二区 | 国产一区亚洲 | 97超级碰碰人国产在线观看 | jizzjizzjizzjizz国产| 国产免费高清 | 看免费5xxaaa毛片 | 免费欧美一级视频 | 亚洲九色 | 国产一级桃视频播放 | 萌白酱福利视频在线网站 | 国产一区二区视频在线播放 | 黄网站在线播放视频免费观看 | 国产一区二区三区视频在线观看 | 国产99久久久国产精品下药 | 久久视频精品 | 日本aaa一级片| 色播久久 | 精品久久久久久久 | 在线观看一二三 | 国产精品野外av久久久 | 国产麻豆交换夫妇 | 国产91成人 | 91网在线播放 | 色柚视频网站ww色 | 九九热九九热 | 久久成人综合视频 | 国产91一区| 久草在线视频新 | 国产精品视频一区二区噜噜 | 欧洲精品久久久 | 久久久久亚洲精品 | 欧洲成人综合网 | 免费a级网站 | 欧美黑人一级 | av在线播放亚洲 | 欧美一级棒 |