国产探花免费观看_亚洲丰满少妇自慰呻吟_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語句的工作原理。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 普格县| 修武县| 黄浦区| 湾仔区| 汤阴县| 彭山县| 儋州市| 从江县| 平舆县| 赫章县| 东城区| 林州市| 古丈县| 榆中县| 突泉县| 衢州市| 南召县| 姚安县| 达孜县| 成武县| 青阳县| 抚顺县| 农安县| 宜兰市| 天等县| 嫩江县| 安平县| 衡山县| 壶关县| 视频| 微山县| 铜梁县| 宜城市| 乌海市| 进贤县| 招远市| 张北县| 大邑县| 天柱县| 深水埗区| 北海市|