寫的很墨跡,將就看。
首先 理解 for 迴圈
for i in [1,2,3,4]
print i
這個是正常
如果 for 迴圈乙個 1234
會報錯,因為 int 不是乙個 iterable 型別
iterable : 字典裡的意思是 可迭代的, 可重複的
可迭代的物件: 字串str 列表 list 元組 tuple 字典 dict 集合set
#證明是否可迭代from collections import iterable
l = [12,3,4]
t = (1,2,3,4)
d =
s =
print(isinstance(l,iterable))
print(isinstance(t,iterable))
print(isinstance(d,iterable))
print(isinstance(s,iterable))
# 清一色的 true
結合 for 迴圈取值的現象,再從字面上理解一下
迭代其實就是 : 可以將某個資料 乙個接著乙個取出來
那麼可迭代協議這麼理解呢?
首先,能被 for 迴圈的就是『可迭代的』可以被迭代滿足的要求就叫做迭代器協議。
可迭代協議的定義: 內部實現了__iter__方法。
綜上總結!!! 可以被 for 迴圈的都是可迭代的,要想可迭代,內部必須有乙個__iter__方法。
那麼這個__iter__做了些什麼事?
print([2,3,4].__iter__())
輸出結果:
iterable 可迭代
iterator 迭代器
迭代器是個什麼鬼東西, 一會乙個可迭代,一會乙個迭代器,我英語一直都不好, 我也沒打算再補。。。
為了python 我忍了
好 那麼,我們來看一看這個帶 iter 的列表和普通列表在功能實現上面有什麼不一樣 好不好
''''/library/frameworks/python.framework/versions/3.6/bin/python3.6 "/users/macbookpro/pycharmprojects/迭代器生成器/blog **.py"l([1,2].__iter__())是列表迭代器中實現的所有方法,l[1,2]是列表中實現的所有方法,
都是以列表的形式返回給我們,為了看的更清楚,我們分別把他們轉換成集合。 然後取差集
'''#
# print(dir([1,2].__iter__()))
# print(dir([1,2]))
print(set(dir([1,2].__iter__())) - set(dir(dir([1,2]))))
#注意盯著看你的括號是否給到位
輸出結果:
process finished with exit code 0
重點就看 最後多出來的那三個方法
那麼我們繼續來看這三個方法,分別都是幹啥的,什麼來路!
iter_l = [1,2,3,4,5,6].__iter__()#獲取迭代器中元素的長度
print(iter_l.__length_hint__())
#根據索引值指定從**開始迭代
print('*',iter_l.__setstate__(4))
!!!!!!#乙個乙個的取值
print('**',iter_l.__next__())
print('***',iter_l.__next__())
好的,這三個辦法我們都乙個個試過了。
來, 跟著我回歸一下初心 捫心問問自己,今天我們學的是啥。
對,最上面寫的有,但是我怕我忘,在這再回憶一下。
能用 for 迴圈的的都是可迭代的,可迭代的內部都使用了__iter__方法
__iter__是根據可迭代協議定出來的,沒有為什麼 你就這樣記就行
然後響指!各位寶貝, 上述三個方法中,能乙個乙個取值,感覺和 for 迴圈一樣樣的是誰?
對!沒錯!是他!我們的朋友,小哪吒= __next__
再 for 迴圈中,就是在內部呼叫了__next__方法,才能乙個乙個取值
'''我是很純很純並且很蠢and 年齡還大的小白乙個,啥也不會,腦子也笨,剛看過的句子 ,到句號 我就忘記句號前面的東西了。
**沒思路 也理解不了, 我要是真的會,我幹嘛要一遍一遍的翻部落格,早進行下面的東西了,
但是這個東西,你學會了 別人也拿不走,以後說不定 你多會一句, 你就能比別人多裝乙個很完美
逼格很高的比了
目前我的辦法是, 只要有時間, 理解**理解思路
剛開始看到這麼一堆我20多年沒見過沒接觸的11002200312030還有這個那個 的時候
我是懵逼 並且很不把它當做一回事的,
可是 真的 被這個破 python 教育的不要不要的, 沒有什麼不勞而獲,就算有那個人也不是你
深深深深深深*******n 的挫敗感 越是讓我不好受,我越要征服你。
各位一起加油!!!
'''來,接著上面,我們碼起來, 你看再多,不如自己照著碼一遍有用,碼一遍你沒收穫,那就再碼繼續碼
#用迭代器的 next 方法來寫乙個不依賴 for 的遍歷
l = [1,2,3,4]stopiteration12'''__iter__是上面說過的,
想要可迭代內部必須有__iter__方法
這裡就是先呼叫這個方法,讓這個列表可迭代
然後下面就是用__next__取值
'''l_iter = l.__iter__()
item = l_iter.__next__()
print(item)
item = l_iter.__next__()
print(item)
item = l_iter.__next__()
print(item)
item = l_iter.__next__()
print(item)
item = l_iter.__next__()
print(item)
item = l_iter.__next__()
print(item)
列印結果:
34報錯了,但是這個報錯我們不尷尬,因為我們把迭代器裡的元素取完了,然後你還要取它就給
你丟擲乙個異常stopiterration,就是在告訴我們,列表中已經沒有有效的元素了。
如何處理呢?comeon
l = [1,2,3,4]#先把它轉化為可迭代的用 iter
l_iter = l.__iter__()
while 1 :
try:
#取它值 用 next
item = l_iter.__next__()
print(item)
except stopiteration:
break
好, 那麼everybody ,我們是如何用 while 迴圈來實現 for 迴圈的功能呢,
來看 我們是從誰**拿的乙個又乙個的值啊, 是媽媽
sob攻略超詳細攻略 重慶旅遊攻略 重慶超詳細攻略
去重慶旅行,人回來了心卻留在重慶,拍拍拍不完的重慶美景,吃吃吃不完的重慶美食,這個城市確實辣得安逸,巴適得很 去重慶建議的遊玩路線 解放碑 八一好吃街 皇冠大扶梯 穿越居民樓輕軌 枇杷園食為鮮火鍋 解放碑 重慶的晚上是比白天好看很多的,解放碑晚上的景色也比白天好看,也能拍到後面的亮燈大廈,那個重慶你...
前端高階攻略之迭代器
1.什麼是迭代?從乙個資料集合中按照一定的順序,不斷的取出資料的過程 2.迭代和遍歷的區別?迭代強調的依次取出,不能確定可以取出的值有多少,也不能保證去把資料全部取完 遍歷必須保證資料的長度,迴圈不斷的全部取出,針對於資料量過大的情況下使用遍歷,需要時間過長 3.迭代器 對迭代過程的封裝,通常表現為...
jQuery 選擇器超詳細
一.基本選擇器 1.demo 選擇 id為demo的第乙個元素 demo css background black 有多個只選擇第乙個2.item 選擇所有class為item的元素 item css background black 3.div 選擇所有標籤為div的元素 div css back...