Python關鍵字yield的介紹

不言
發布: 2018-10-16 15:59:19
轉載
1852 人瀏覽過
這篇文章帶給大家的內容是關於Python關鍵字yield的介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

協程是Tornado中進行非同步I/O程式碼開發的方法。協程使用了Python關鍵字yield將呼叫者掛起和恢復執行。所以在學習協程之前,我們先熟悉一下yield的概念和使用方法,而要想理解yield,需要先理解迭代器的概念。

在Python種,使用yield 關鍵字定義的迭代器也被稱為【生成器】

1、迭代器

迭代器(Iterator)是存取集合內元素的一種方式。迭代器物件從集合的第1個元素開始訪問,直到所有元素都被訪問一遍後結束。迭代器不能後退,只能前進迭代。

Python種最常用迭代器的場景是循環語句for,它用迭代器封裝集合,並且煮個訪問集合元素以執行循環。

例如:

for number in range(5):#range返回一个列表
    print(number)
登入後複製

其中的range()傳回一個包含所指定元素的集合,而for語句將其封裝成一個迭代器後訪問,使用iter()可以講列表、集合轉換成迭代器,例如:

numbers=[1,2,3,4,5]
#t就是迭代器
t=iter(numbers)
#打印t对象,以便查看其类型
print(t)
登入後複製

傳回結果:

<list_iterator object at 0x10e805748>
登入後複製

迭代器與普通Python物件相比,多了一個__next__()方法,每次呼叫該方法可以傳回一個元素,呼叫者(例如for語句)可以透過不斷呼叫__next__()方法來煮個存取集合元素。

例如:

numbers=[1,2,3,4,5]
#t就是迭代器
t=iter(numbers)
#打印t对象,以便查看其类型
print(t.__next__())
print(t.__next__())
print(t.__next__())
print(t.__next__())
登入後複製

傳回結果:

1
2
3
4
登入後複製

呼叫者可以一直呼叫__next__()方法,直到傳回StopIteration例外。

2、使用yield

迭代器在Python程式設計種的使用範圍很廣,那麼開發者該如何自訂自己的迭代器呢?

答案是使用yield關鍵字。

呼叫任何定義包含yield關鍵字的函數都不會執行該函數,而是會得到一個隊應於該函數的迭代器。

實例:

import time
def demoIternator():
    print("---1---")
    yield 1
    print("---2---")
    yield 2
    print("---3---")
    yield 3
    print("---4---")

for x in demoIternator():
    print(x)
    time.sleep(1)
登入後複製

每次呼叫迭代器的__next__()方法,將執行迭代器函數,並傳回yield的結果作為迭代傳回元素。

#

以上是Python關鍵字yield的介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:segmentfault.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板