python函數實現迭代的簡單介紹

python 如何使用生成器函數實現可迭代對象

Iamlaosong文

創新互聯建站10多年成都企業網站建設服務;為您提供網站建設,網站制作,網頁設計及高端網站定制服務,成都企業網站建設及推廣,對葡萄架等多個領域擁有多年的網站維護經驗的網站建設公司。

我們在用for ... in ...語句循環時,in后面跟隨的對象要求是可迭代對象,即可以直接作用于for循環的對象統稱為可迭代對象(Iterable),如list、tuple、dict、set、str等。

可迭代對象是實現了__iter__()方法的對象,而迭代器(Iterator)則是實現了__iter__()和__next__()方法的對象,可以顯示地獲取下一個元素。這種可以被next調用并不斷返回下一個值的對象稱為迭代器。迭代器一定是可迭代對象,反過來則不一定成立。用iter()函數可以把list、dict、str等Iterable變成Iterator,例如:

bb=[x for x in range(10)]

cc=iter(bb)

cc.next()

循環變量的值其實可以看著是一次次用next取值的過程,每取一個值,做一次處理。list等對象用于循環實際上可以看著是用iter()方法產生一個迭代器,然后循環取值。

生成器(generator)就是一個能返回迭代器的函數,其實就是定義一個迭代算法,可以理解為一個特殊的迭代器。調用這個函數就得到一個迭代器,生成器中的yield相當于一個斷點,執行到此返回一個值后暫停,從而實現next取值。

python中的迭代器的理解?

9.9. 迭代器

現在你可能注意到大多數容器對象都可以用 for 遍歷:

for element in [1, 2, 3]:

print(element)

for element in (1, 2, 3):

print(element)

for key in {'one':1, 'two':2}:

print(key)

for char in "123":

print(char)

for line in open("myfile.txt"):

print(line, end='')

這種形式的訪問清晰、簡潔、方便。迭代器的用法在 Python 中普遍而且統一。在后臺, for 語句在容器對象中調用 iter() 。該函數返回一個定義了 __next__() 方法的迭代器對象,它在容器中逐一訪問元素。沒有后續的元素時, __next__() 拋出一個 StopIteration 異常通知 for 語句循環結束。你可以是用內建的 next() 函數調用 __next__() 方法;以下是其工作原理的示例:

s = 'abc'

it = iter(s)

it

next(it)

'a'

next(it)

'b'

next(it)

'c'

next(it)

Traceback (most recent call last):

File "

", line 1, in ?

next(it)

StopIteration

了解了迭代器協議的后臺機制,就可以很容易的給自己的類添加迭代器行為。定義一個 __iter__() 方法,使其返回一個帶有 __next__() 方法的對象。如果這個類已經定義了 __next__() ,那么 __iter__() 只需要返回 self:

Python基礎之迭代器

一.什么是迭代器

迭代器是用來迭代取值的工具。

而涉及到把多個值循環取出來的類型有:列表,字符串,元組,字段,集合,打開文件等。通過使用的遍歷方式有for···in···,while等,但是,這些方式只適用于有索引的數據類型。為了解決索引取的局限性,python提供了一種 不依賴于索引的取值方式:迭代器

注意:

二.可迭代對象

可迭代對象:但凡內置有__iter__方法的都稱為可迭代對象

常見的可迭代對象:

1.集合數據類型,如list,tuple,dict,set,str等

2.生成器,包括生成器和帶yield的生成器函數。

三.如何創建迭代器

迭代器是一個包含數個值的對象。

迭代器是可以迭代的對象,這意味著您可以遍歷所有值。

從技術上講,在Python中,迭代器是實現迭代器協議的對象,該協議由方法 __iter__() 和 __next__() 組成。

簡而言之,一個類里面實現了__iter__()和__next__()這兩個魔法方法,那么這個類的對象就是可迭代對象。

四.迭代器的優缺點

1.優點

2.缺點

五.迭代器示例

另外,如果類Stu繼承了Iterator,那么Stu可以不用實現__iter__()方法

遍歷迭代器

StopIteration

如果你有足夠的 next() 語句,或者在 for 循環中使用,則上面的例子將永遠進行下去。

為了防止迭代永遠進行,我們可以使用 StopIteration 語句。

在 __next__() 方法中,如果迭代完成指定的次數,我們可以添加一個終止條件來引發錯誤

網頁名稱:python函數實現迭代的簡單介紹
文章出自:http://m.kartarina.com/article6/hddhig.html

成都網站建設公司_創新互聯,為您提供網頁設計公司微信小程序全網營銷推廣自適應網站網站導航網站設計公司

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都app開發公司
主站蜘蛛池模板: 亚洲?V无码乱码国产精品| 精品久久久无码人妻中文字幕豆芽| 亚洲av无码专区在线观看下载| 国产乱人伦中文无无码视频试看| 免费无码AV电影在线观看| 国产精品亚洲а∨无码播放麻豆| 中文字幕乱码人妻无码久久 | 丰满熟妇人妻Av无码区| 亚洲AV永久青草无码精品| 国产精品成人无码久久久| 久久亚洲精品AB无码播放| h无码动漫在线观看| 精品爆乳一区二区三区无码av| 国产精品无码一区二区三区免费| 亚洲精品无码日韩国产不卡?V| 无码精品A∨在线观看| 亚洲av无码av制服另类专区| 免费人成无码大片在线观看| 中文字幕av无码一区二区三区电影 | 日韩精品无码视频一区二区蜜桃| 亚洲熟妇无码八AV在线播放| 无码无套少妇毛多69XXX| 无码精品一区二区三区免费视频| 久久亚洲精品无码观看不卡| 岛国av无码免费无禁网站| 无码高潮爽到爆的喷水视频app| 无码超乳爆乳中文字幕久久| 亚洲综合av永久无码精品一区二区| 国产综合无码一区二区色蜜蜜| 人妻aⅴ中文字幕无码| 无码午夜成人1000部免费视频 | 精品人妻无码区二区三区| 亚洲无码视频在线| 国产成人无码a区在线视频| 黄色成人网站免费无码av| 大胆日本无码裸体日本动漫| 国产成人无码av在线播放不卡| 成人免费无码精品国产电影| 精品一区二区三区无码视频| 惠民福利中文字幕人妻无码乱精品 | 精品久久久久久无码专区|