a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

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

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語句的工作原理。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 午夜精品视频 | 久久久婷 | 中文字幕不卡 | 欧美激情自拍偷拍 | 欧美日韩视频 | 成人免费视频网站在线观看 | 亚洲精品一区二区网址 | 黄色毛片视频在线观看 | 久久国产精品毛片 | 黄色片com | 国产精品美女www爽爽爽动态图 | 国模精品视频一区二区 | 综合网激情 | 超碰成人97 | 91午夜精品一区二区三区 | 久久99精品久久久久国产越南 | 日韩在线视频免费观看 | 激情婷婷丁香 | a黄视频| 久久久久久久久久影院 | 久久精品久久精品 | 成人欧美一区二区三区在线播放 | 久久国产精品99久久久久久牛牛 | 亚洲一级毛片 | 亚洲视频在线看 | 美日韩精品视频 | 中文字幕在线观看2021 | 国产男女爽爽爽免费视频 | 亚洲第一网站 | 欧美精品一区二区三区四区五区 | 亚洲视频中文字幕 | 午夜久久| julia一区二区三区中文字幕 | 北条麻妃国产九九九精品小说 | 欧美日韩国产一区二区三区不卡 | 欧美日本免费一区二区三区 | 成人高清在线观看 | 日韩电影 | 亚洲黄页| 成人超碰在线 | 久久九九国产精品 |