迭代其實就是更新換代,每一次迭代的過程都需要依賴於上一次的結果。
# 單純的迴圈 不是迭代
import time
while true:
print(123)
time.sleep(0.1)
# 屬於迭代
n = 1
while true:
print(n)
n += 1
# 迭代取值
l1 = [11, 22, 33, 44, 55]
n = 0
while n < len(l1):
print(l1[n])
n += 1
python 中可迭代物件並不是指某種具體的資料型別,它是指儲存了元素的乙個容器物件,且容器中的元素可以通過__iter__
方法訪問。
屬於可迭代物件的有字串、列表、字典、元組、集合、檔案物件。
可迭代物件呼叫__iter__
方法之後生成的結果就是迭代器物件。迭代器物件的明顯的特徵就是可以呼叫__iter__
方法和__next__
方法.
迭代器物件能夠極大的節省儲存空間,用的時候可以從中取出很多資料。有了迭代器物件才出現了針對字典和集合的迭代取值操作。
迭代器物件取值時可以直接呼叫__next__
方法,但是如果取完了就會直接報錯。這就涉及到 for 迴圈的底層用法了,其實迭代器就是 for 迴圈的原理,for 迴圈就是它的簡便寫法。
s = '123'
res = s.__iter__()
n = 0
while n < len(s):
print(res.__next__())
n += 1
'''for 變數名 in 可迭代物件:
迴圈體**
1.會將in後面的資料呼叫__iter__()變成迭代器物件
為什麼檔案物件也可以for迴圈 因為本身就是迭代器物件 再次呼叫不變
2.針對產生的迭代器物件依次呼叫__next__()方法迭代取值
3.當值取完之後 會自動處理報錯並退出迴圈
'''
許多雙下劃線方法其實都有簡便寫法。
s = '123'
print(s.__iter__()) # print(iter(s)) # print(s.__len__()) # 3
print(len(s)) # 3
這兩個方法和它的簡便寫法的作用是一樣的。
有一些可迭代物件本身也是迭代器物件比如檔案物件,其他可迭代物件都要經過轉化。
可迭代物件的迭代器物件的迭代器物件,還是可迭代物件的迭代器物件。
s = '123'
res = s.__iter__()
res1 = s.__iter__().__iter__().__iter__()
print(res, res1) #
迭代器物件取值時,要將可迭代物件先轉換成迭代器物件才能用__next__
方法迭代,否則直接使用可迭代物件,每次迭代都會是同乙個值。
s = '123'
print(s.__iter__().__next__()) # 1
print(s.__iter__().__next__()) # 1
print(s.__iter__().__next__()) # 1
res = s.__iter__() # 變成迭代器物件
print(res.__iter__().__next__()) # 1
print(res.__iter__().__next__()) # 2
print(res.__iter__().__next__()) # 3
正式學習了迭代的相關知識,並且還學習了處理 bug 的方法。 Python從入門到放棄 列表(1)
今天學習到了列表,順便做一下筆記和複習。刪 del list index list.remove val list.pop index 1 obj可選引數,要移除列表元素的索引值,預設為 index 1,刪除最後乙個列表值 改 list index newvalue 查 list index 排序 ...
python 從入門到放棄
本人所有關於python的內容均為學習期間的整理的筆記,希望可以給學習者帶來些許幫助!不過一入it深似海!準備入行者請做好充分的心理準備!計算機的知識跟新迭代速度很快,不學習就會被淘汰!如果你打算入行然後找乙份安穩的工作安度餘生,那麼我還是建議去考公務員吧!這個行業可能並不適合你!有不少的人可能都覺...
學習python,從入門到放棄(6)
昨日留下了乙個猜年齡的 作業用於鞏固前面所學知識,今日給定了標準答案。我也給出了我的答案。對比來看老師的 簡潔明瞭,用稍少的 完成了目標,我的 雖然有些冗長而且有重複的 塊,但是新增了年齡隨機數還有在輸入y n的時候考慮了輸入別的內容的情況。型別轉換 str 可以轉換所有基本資料型別。索引與切片 字...