真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

零基礎(chǔ)學(xué)python之迭代器是什么

這篇文章主要介紹零基礎(chǔ)學(xué)python之迭代器是什么,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

平潭網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)自2013年創(chuàng)立以來(lái)到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)

迭代器

迭代器可以簡(jiǎn)單的理解為 for 循環(huán), Python 除了 for 循環(huán)為我們準(zhǔn)備了另一種訪問集合元素的方式。

特點(diǎn):

可以記住遍歷的位置的對(duì)象。

迭代器從集合的第一個(gè)元素開始訪問,直到所有的元素訪問結(jié)束。

迭代器只能向前不能后退。

但是判斷一個(gè)對(duì)象是否有迭代器,除了看它能不能使用 for 循環(huán)外, Python 也為我們提供了更加專業(yè)的方法—— isinstance() 。

我們可以使用 isinstance() 來(lái)判斷當(dāng)前的對(duì)象是否可以迭代。

在使用迭代器之前,需要先將迭代器引入,因?yàn)榈鞑皇?Python 的內(nèi)置方法。

from collections.abc import Iterable
print(isinstance('geekdigging', Iterable))
print(isinstance([], Iterable))
print(isinstance([], Iterable))
print(isinstance({x for x in range(5)}, Iterable))
print(isinstance(123, Iterable))

打印結(jié)果如下:

True
True
True
True
False

這里有一個(gè)小點(diǎn)注意一下,當(dāng)我們?cè)谝?Iterable 的時(shí)候,在之前的版本引入方式都是 from collections import Iterable ,但是在 Python3.7 的時(shí)候拋了一個(gè)異常出來(lái),如下:

D:/Development/Projects/python-learning/base-iter/Demo.py:1: DeprecationWarning: Using or importing the ABCs 
from '
collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
from collections import Iterable

含義是這種引入方式將在 Python3.8 中停止使用,現(xiàn)在 Python3.8 已經(jīng)發(fā)布了,我們就按照提示中的方式來(lái)引入,使用 from collections.abc import Iterable 。

迭代器中,最重要的方法一定是 next() ,從名字上就能看出來(lái),它的作用是下一個(gè)。

我們現(xiàn)在來(lái)嘗試迭代一個(gè)列表:

list1 = [1, 2, 3, 4]
next(list1)

執(zhí)行結(jié)果:

Traceback (most recent call last):
  File "D:/Development/Projects/python-learning/base-iter/Demo.py", line 12, in 
    next(list1)
TypeError: 'list' object is not an iterator

不是說(shuō)好的列表是可以迭代的么,為什么又報(bào)錯(cuò)了。

這位同學(xué),先消消氣,看看報(bào)錯(cuò)信息說(shuō)的是啥,這是在提示我們列表并不是一個(gè)迭代器。

所以,可迭代對(duì)象不一定是迭代器!

我們導(dǎo)入 Iterator 模塊,先將列表轉(zhuǎn)換成迭代器,再試試看。

list1 = iter(list1)
print(type(list1))

執(zhí)行結(jié)果:

從類型上來(lái)看,現(xiàn)在已經(jīng)是一個(gè)可以迭代的列表了,我們?cè)僭囋?next() 方法。

print(next(list1))
print(next(list1))
print(next(list1))
print(next(list1))

執(zhí)行結(jié)果:

1
2
3
4

你看,現(xiàn)在就能正常打印了吧。

剛才我們將整個(gè)列表中的元素迭代完了,如果這時(shí)候再迭代一次會(huì)怎么樣呢?

print(next(list1))

執(zhí)行結(jié)果:

Traceback (most recent call last):
  File "D:/Development/Projects/python-learning/base-iter/Demo.py", line 23, in 
    print(next(list1))
StopIteration

看到了咯,會(huì)拋出 StopIteration 的異常。

可能看到這里,大家還是感覺迭代器沒什么用,下面我再來(lái)舉個(gè)例子,如果我們現(xiàn)在有一個(gè) set 集合,我想要獲取一個(gè)一個(gè) set 集合中的元素,這時(shí)迭代器就派上用場(chǎng)了,因?yàn)樵?set 集合中,是沒有索引的,如果想要取到某個(gè)值,就只能使用 for 循環(huán)整個(gè)集合,但是有了迭代器以后,我們就無(wú)需循環(huán)整個(gè)集合了。

set1 = {1, 2, 3, 4, 5}
set1 = iter(set1)
print(next(set1))
print(next(set1))
print(next(set1))
print(next(set1))
print(next(set1))

結(jié)果我就不放出來(lái)了,大家應(yīng)該都知道結(jié)果了。

除此之外,迭代器有一個(gè)非常巨大的優(yōu)勢(shì)是在迭代之前,無(wú)需準(zhǔn)備好所有的元素,迭代器僅在迭代到某個(gè)元素的時(shí)候才開始計(jì)算這個(gè)元素,在這之前或者之后,元素是可以不存在或者被銷毀的。

這個(gè)特性使得它在遍歷一些體積巨大的集合的時(shí)候,具有非常大的優(yōu)勢(shì)。

以上是零基礎(chǔ)學(xué)python之迭代器是什么的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


當(dāng)前題目:零基礎(chǔ)學(xué)python之迭代器是什么
文章轉(zhuǎn)載:http://weahome.cn/article/jsesih.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部