91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python 中怎么使用send()傳參給yield語句

發布時間:2021-07-22 17:11:12 來源:億速云 閱讀:143 作者:Leah 欄目:開發技術

這篇文章將為大家詳細講解有關Python 中怎么使用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 += 1
obj = 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
1

創建生成器的簡單方式:

Python 中怎么使用send()傳參給yield語句

關于Python 中怎么使用send()傳參給yield語句就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丹江口市| 微博| 澄迈县| 前郭尔| 瓦房店市| 玛多县| 昆明市| 彩票| 巴楚县| 宁城县| 肥城市| 仁怀市| 宁南县| 陈巴尔虎旗| 漠河县| 绍兴县| 冀州市| 蛟河市| 南宫市| 龙岩市| 丽水市| 板桥市| 施甸县| 宿州市| 江都市| 林周县| 晋江市| 瑞安市| 股票| 遂川县| 府谷县| 玉林市| 南雄市| 九江县| 道孚县| 阿拉善盟| 佛山市| 惠水县| 特克斯县| 二连浩特市| 潜江市|