91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

零基礎學python之迭代器是什么

發布時間:2020-08-04 11:29:28 來源:億速云 閱讀:146 作者:清晨 欄目:編程語言

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

迭代器

迭代器可以簡單的理解為 for 循環, Python 除了 for 循環為我們準備了另一種訪問集合元素的方式。

特點:

可以記住遍歷的位置的對象。

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

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

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

我們可以使用 isinstance() 來判斷當前的對象是否可以迭代。

在使用迭代器之前,需要先將迭代器引入,因為迭代器不是 Python 的內置方法。

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))

打印結果如下:

True
True
True
True
False

這里有一個小點注意一下,當我們在引入 Iterable 的時候,在之前的版本引入方式都是 from collections import Iterable ,但是在 Python3.7 的時候拋了一個異常出來,如下:

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 中停止使用,現在 Python3.8 已經發布了,我們就按照提示中的方式來引入,使用 from collections.abc import Iterable 。

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

我們現在來嘗試迭代一個列表:

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

執行結果:

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

不是說好的列表是可以迭代的么,為什么又報錯了。

這位同學,先消消氣,看看報錯信息說的是啥,這是在提示我們列表并不是一個迭代器。

所以,可迭代對象不一定是迭代器!

我們導入 Iterator 模塊,先將列表轉換成迭代器,再試試看。

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

執行結果:

<class 'list_iterator'>

從類型上來看,現在已經是一個可以迭代的列表了,我們再試試 next() 方法。

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

執行結果:

1
2
3
4

你看,現在就能正常打印了吧。

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

print(next(list1))

執行結果:

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

看到了咯,會拋出 StopIteration 的異常。

可能看到這里,大家還是感覺迭代器沒什么用,下面我再來舉個例子,如果我們現在有一個 set 集合,我想要獲取一個一個 set 集合中的元素,這時迭代器就派上用場了,因為在 set 集合中,是沒有索引的,如果想要取到某個值,就只能使用 for 循環整個集合,但是有了迭代器以后,我們就無需循環整個集合了。

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

結果我就不放出來了,大家應該都知道結果了。

除此之外,迭代器有一個非常巨大的優勢是在迭代之前,無需準備好所有的元素,迭代器僅在迭代到某個元素的時候才開始計算這個元素,在這之前或者之后,元素是可以不存在或者被銷毀的。

這個特性使得它在遍歷一些體積巨大的集合的時候,具有非常大的優勢。

以上是零基礎學python之迭代器是什么的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武威市| 墨脱县| 明星| 菏泽市| 奉化市| 徐水县| 礼泉县| 高淳县| 余庆县| 勃利县| 大新县| 香河县| 徐州市| 池州市| 瓮安县| 麻栗坡县| 象山县| 万安县| 黄冈市| 阳春市| 丰都县| 攀枝花市| 石泉县| 芒康县| 英德市| 广德县| 静海县| 尼木县| 东明县| 凉城县| 阿克陶县| 炎陵县| 沅江市| 黄大仙区| 万宁市| 泗洪县| 昭通市| 新绛县| 勐海县| 台湾省| 海城市|