日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python3迭代器是什么,python3 迭代器

發(fā)布時(shí)間:2025/3/15 python 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python3迭代器是什么,python3 迭代器 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 想要了解 迭代器 ,需要先 知道什么是 可迭代對(duì)象。

簡(jiǎn)單點(diǎn)說,可以直接作用于for循環(huán)的對(duì)象,稱之為可迭代對(duì)象(Iterable)。

1.png

可迭代對(duì)象,一定實(shí)現(xiàn)了__iter__方法。isinstance內(nèi)建函數(shù),可以判斷一個(gè)對(duì)象是否是某個(gè)類的實(shí)例對(duì)象。通過運(yùn)行代碼我們可以看到,返回了True. 表示 it 這個(gè)對(duì)象是一個(gè)可迭代對(duì)象。

__iter__ 這個(gè)方法只有返回一個(gè)特殊的對(duì)象才有實(shí)際的意義。(這個(gè)特殊對(duì)象,可以調(diào)用next方法,不斷返回一個(gè)值,沒有值的時(shí)候拋出StopIteration異常),這里所說的特殊對(duì)象,就是迭代器(Iterator)。

iter函數(shù)的作用:調(diào)用 參數(shù)對(duì)象的 __iter__方法 返回一個(gè) 迭代器對(duì)象(Iterator)。

2. 迭代器(Iterator)

簡(jiǎn)單點(diǎn)說,可以調(diào)用__next__方法,不斷返回一個(gè)值的對(duì)象稱之為迭代器.

迭代器要求必須有__iter__方法和__next__方法。換句話說,也就是,如果你想自己定義一個(gè)迭代器,那么你必須定義__iter__方法和__next__方法。

自定義 迭代器:

from collections import Iterable, Iterator

class test(object):

def __init__(self, b):

self.a = 0

self.b = b

def __iter__(self):

return self

def __next__(self):

if self.a < self.b:

i = self.a

self.a += 1

return i

else:

raise StopIteration()

it = test(10)

print(isinstance(it, Iterable))

print(isinstance(it, Iterator))

# next(it) # 實(shí)際上 調(diào)用 it 對(duì)象的 __next__ 方法。

for temp1 in it:

print(temp1)

for temp2 in it:

print(temp2)

可見:迭代器 一定是 可迭代對(duì)象。列表、元組、字符串、字典、集合 這些雖然是 可迭代對(duì)象,但是不是 迭代器。iter() 函數(shù)可以很方便的把他們轉(zhuǎn)換為迭代器。

for循環(huán)的工作原理:調(diào)用iter()函數(shù),獲取一個(gè)迭代器對(duì)象,然后迭代器調(diào)用__next__()方法不斷返回一個(gè)值,直到遇到StopIteration這個(gè)異常 ,停止循環(huán)。

注意:迭代器 在 返回所有值之后,就空了,沒有了。it這個(gè)對(duì)象,就好比是一個(gè)盛滿水的水壺,調(diào)用__next__方法相當(dāng)于 倒水,水倒完了,水壺自然就空了

迭代器是一次性的,只能作用于一次for循環(huán),當(dāng)然 這不是絕對(duì)的,可以 自己修改成 無限次。如何修改呢?

只需要在 __iter__ 方法中 加上 self.a = 0 這行代碼即可。

總結(jié)

以上是生活随笔為你收集整理的python3迭代器是什么,python3 迭代器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。