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

溫馨提示×

溫馨提示×

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

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

python的迭代、可迭代、迭代器有哪些區別

發布時間:2021-11-25 13:42:01 來源:億速云 閱讀:213 作者:iii 欄目:互聯網科技

這篇文章主要講解了“python的迭代、可迭代、迭代器有哪些區別”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“python的迭代、可迭代、迭代器有哪些區別”吧!

一、基本概念

迭代(Iteration)動詞,是指通過遍歷獲取某容器內所有元素,特指遍歷獲取這個動作。

可迭代 (iterable)形容詞,是指某容器可被遍歷獲取內部所有元素,特指容器內元素可被遍歷獲取的特性。

在python中包含__iter__方法的對象就是可迭代的。

  • 可迭代對象一般指某容器可被循環遍歷獲取內部所有元素,該容器有__iter__方法和__getitem__,無__next__方法。

  • 可迭代對象常見的有str、list、tuple、set、dict等。

迭代器 (iterator)名詞,特指某種特殊的容器,該容器內所有元素可通過__next__方法依次獲取

在python中包含__iter__方法和__next__方法的對象就是迭代器。

  • 迭代器一般指某容器可通過__next__方法依次獲取內部所有元素,該容器有__iter__方法和__next__,無__getitem__方法。

  • 迭代器常見的有文件句柄以及通過iter()轉換的對象和迭代器生成式生成的對象等。

  • 生成器,是一種特殊的迭代器,生成器自動生成了__iter__方法和__next__,不需要再手動生成。

python的迭代、可迭代、迭代器有哪些區別

二、區分可迭代對象與迭代器的方法

  1. 判斷一個對象是可迭代對象,可以通過查看該對象是不是有__iter__方法和__getitem__方法來鑒別。

# 字符串:可迭代對象
s1 = '努力學python,堅持認真學python'
print('*' * 10, '判斷字符串iter、getitem、next', '*' * 10)
print('iter:', '__iter__' in dir(s1))
print('getitem:', '__getitem__' in dir(s1))
print('next:', '__next__' in dir(s1))
# 列表:可迭代對象
l1 = [i for i in range(10)]
print('*' * 10, '判斷列表iter、getitem、next', '*' * 10)
print('iter:', '__iter__' in dir(l1))
print('getitem:', '__getitem__' in dir(l1))
print('next:', '__next__' in dir(l1))

out:
********** 判斷字符串iter、getitem、next **********
iter: True
getitem: True
next: False
********** 判斷列表iter、getitem、next **********
iter: True
getitem: True
next: False
  1. 判斷一個對象是不是迭代器,可以通過查看該對象是不是有__iter__方法和__next__方法來鑒別。

# 字符串迭代器
s2 = iter(s1)
print('*' * 10, '判斷字符串迭代器iter、getitem、next', '*' * 10)
print('iter:', '__iter__' in dir(s2))
print('getitem:', '__getitem__' in dir(s2))
print('next:', '__next__' in dir(s2))
# 列表迭代器
l2 = iter(l1)
print('*' * 10, '判斷列表迭代器iter、getitem、next', '*' * 10)
print('iter:', '__iter__' in dir(l2))
print('getitem:', '__getitem__' in dir(l2))
print('next:', '__next__' in dir(l2))

out:
********** 判斷字符串迭代器iter、getitem、next **********
iter: True
getitem: False
next: True
********** 判斷列表迭代器iter、getitem、next **********
iter: True
getitem: False
next: True
  1. 可以自定義一個簡單的lambda表達式來判斷是可迭代對象還是迭代器。

is_er = lambda x: '__iter__' in dir(x) and '__getitem__' in dir(x)
is_or = lambda x: '__iter__' in dir(x) and '__next__' in dir(x)
s1 = '努力學python,堅持認真學python'
s2 = iter(s1)

print('s1是可迭代對象嗎?', is_er(s1))
print('s1是迭代器嗎?', is_or(s1))
print('s2是可迭代對象嗎?', is_er(s2))
print('s2是迭代器嗎?', is_or(s2))

out:
s1是可迭代對象嗎? True
s1是迭代器嗎? False
s2是可迭代對象嗎? False
s2是迭代器嗎? True

三、可迭代對象與迭代器的優劣比較

可迭代對象的優點:

  1. 訪問速度快。

  2. 訪問方式靈活,可多次、重復、任意選擇范圍訪問。

  3. 內置方法和函數比較多。

可迭代對象的缺點:

  1. 耗費內存。

  2. 取值過于靈活(有時會引起報錯,如index out of range、TypeError等)。

迭代器的優點:

  1. 節省內存。

  2. 惰性取值(一次固定取一條數據,直到取值完畢報StopIteration,不會引發報錯)。

迭代器的缺點:

  1. 訪問速度慢。

  2. 訪問方式死板,只能訪問下一條不能訪問上一條。

  3. 內置方法和函數比較少。

四、可迭代對象與迭代器如何抉擇

  • 在存儲數據相對少(8g內存可承受幾百萬個對象),側重對數據靈活處理時,將數據集設為可迭代對象更好。

  • 當數據量大到足以撐爆內存(幾千萬甚至上億個對象時),側重節省內存時,將數據集設為迭代器更好。

感謝各位的閱讀,以上就是“python的迭代、可迭代、迭代器有哪些區別”的內容了,經過本文的學習后,相信大家對python的迭代、可迭代、迭代器有哪些區別這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

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

AI

凌云县| 辽中县| 镇巴县| 九江县| 乐业县| 浮梁县| 云阳县| 盐津县| 富顺县| 德兴市| 鄂托克旗| 承德市| 格尔木市| 凤凰县| 馆陶县| 宽甸| 金湖县| 清徐县| 金乡县| 阜阳市| 安顺市| 梨树县| 韶山市| 盐亭县| 万山特区| 霸州市| 南昌县| 金华市| 华容县| 宾阳县| 临沧市| 南溪县| 长宁区| 顺义区| 岐山县| 屏南县| 河北区| 莱州市| 南投市| 聊城市| 元江|