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

首頁 > 學院 > 操作系統 > 正文

python特性(二):迭代器與for語句

2024-06-28 16:05:12
字體:
來源:轉載
供稿:網友

網上許多文章說Python的for語句中,in關鍵字后面的對象是一個集合。例如

for i in [1,2,3]    PRint i上面代碼中in關鍵字后面的對象[1,2,3]是一個list,也是一個集合。

但in關鍵字后面的對象其實不必是一個集合。后面接一個序列對象也是合法的。 例如

myrange = MyRange(0, 10)for i in myrange:    print i上面代碼中的myrange對象是一個序列對象,但不是集合。參見上一篇博文。

事實上,for語句中in關鍵字后面的對象也不必是序列對象,它只需要是一個可迭代對象(Iterable)即可。

一個可迭代的對象需要滿足下面兩個條件之一:

它實現了__iter__方法。該方法會返回一個迭代器對象。或者它是一個序列對象。

注意:如果一個類型實現了__iter__方法,那么在該方法中顯式地給出了與該類型相關的迭代器如何構造。可是,對于序列類型來說,它有一個很天然的迭代器。因此,無需通過實現__iter__方法來顯式定義。下一篇博文將介紹如何通過序列對象構造天然的迭代器。這里先介紹迭代器對象的嚴格定義。

一個迭代器,本質上也是一個序列。它需要實現下面兩個方法。

next方法(老版本的Python叫__next__方法)。當第11次調用next方法時,會返回序列的第1個元素;當第2次調用next方法時,會返回序列的第2個元素;當序列中的元素耗盡,拋出StopIteration異常。__iter__方法。前面說過__iter__方法通常返回迭代器對象。因此,對于一個迭代器來說,它的__iter__方法只需返回其本身即可。

通過上面的定義,我們知道,一個迭代器對象,也必是可迭代的。

下面的代碼定義了一個迭代器。

class MyIterator:    def __init__(self, start, end):        self.start = start        self.end = end    def next(self):        if self.start >= self.end:            raise StopIteration        self.start = self.start + 1        return self.start - 1    def __iter__(self):        return self測試代碼

myiter = MyIterator(0, 2)print myiter.next()print myiter.next()print myiter.next()輸出結果如下

01Traceback (most recent call last):  File "test.py", line 27, in <module>    print myiter.next()  File "test.py", line 16, in next    raise StopIterationStopIteration

下面的代碼測試在for語句中使用迭代器

myiter = MyIterator(0, 10)for i in myiter:    print i輸出結果

0123456789

在下一篇博文中,將繼續介紹for語句的工作原理。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 什邡市| 仙居县| 邵东县| 邛崃市| 闻喜县| 达日县| 天津市| 洛南县| 赫章县| 枝江市| 鄂托克前旗| 孟村| 托里县| 临江市| 庐江县| 沂南县| 邳州市| 龙南县| 桐城市| 馆陶县| 湾仔区| 子洲县| 乐山市| 泰兴市| 中方县| 边坝县| 潜山县| 江西省| 纳雍县| 贵德县| 天门市| 微山县| 伊川县| 通山县| 上栗县| 浪卡子县| 青州市| 玉屏| 温泉县| 屏东县| 涞水县|