python迭代器:
迭代器是python最強大的功能之一,是訪問集合元素的一種方式。
迭代器給你提供了一種不依賴於索引取值的方式。
迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能依次往前取值往前不會後退。
迭代器分為可迭代物件和迭代器物件:
可迭代物件:內建有__iter__方法的
迭代器物件:既內建有__iter__也內建有__next__方法
迭代器一定是可迭代物件,而可迭代物件不一定是迭代器物件
基本資料型別中是可迭代物件的有
str list tuple dict set
檔案物件(執行內建的__iter__之後還是本身 沒有任何變化):檔案物件本身就是迭代器物件
可迭代物件執行內建的__iter__方法得到就是該物件的迭代器物件
迭代器一定是可迭代物件,而可迭代物件不一定是迭代器物件
迭代器物件無論執行多少次__iter__方法得到的還是迭代器物件本身
1 list=[1,2,3,4]2 it = iter(list) #建立迭代器物件
3 print (next(it)) #輸出迭代器的下乙個元素
4 15 print (next(it)) #重複 + 每次迭代都是基於上一次的結果而來的
6 29 #迭代器也可以用於for語句進行迭代
11 list=[1,2,3,4]12 it = iter(list) #建立迭代器物件
13 for x init:14 print (x, end=" ")15
16 1 2 3 4
18 #iter.__iter__():返回迭代器物件本身
19 list=[1,2,3,4]20 list=iter(list)21 print(list.__iter__())22
23 27 list=[1,2,3,4]28 list=iter(list)29 print(list.__next__())30 print(list.__next__())31 print(list.__next__())32 print(list.__next__())33 print(list.__next__())34
35 1
36 2
37 3
38 4
39traceback (most recent call last):40 file "d:/pycharm/pycharmwenjian/venv/scripts/練習.py", line 932, in
41 print(list.__next__())42 stopiteration
for迴圈本質:
for迴圈的一些簡單應用:
ls=[1,2,3]
for i in ls:
print(i)
我們知道這樣可以依次迴圈地取出這裡面的每乙個元素,其實for迴圈的工作流程是基於迭代器協議的,for 迴圈在處理這些資料前,會將in後面的物件呼叫 __iter__() 方法,將這些資料轉化為乙個迭代器,然後呼叫迭代器的 __next__() 方法,並捕獲stopiteration異常,也就實現了依次迴圈完所有資料就會結束,並不會丟擲這個異常。
1 x=[1,2,3]2 x_i=x.__iter__()3 try:4 whiletrue:5 print(x_i.__next__())6 except stopiteration: #記錄這個異常,碰到這個異常結束迴圈並不列印異常
7 pass
9 110 2
11 3
"""迭代取值:
優點1.不依賴於索引取值
2.記憶體中永遠只佔乙份空間,不會導致記憶體溢位
缺點1.不能夠獲取指定的元素
2.取完之後會報stopiteration錯"""
生成器:是我們使用者自己定義的迭代器,其本質就是迭代器。
生成器類似於返回值為陣列的乙個函式,這個函式可以接受引數,可以被呼叫,但是,不同於一般的函式會一次性返回包括了所有數值的陣列,生成器一次只能產生乙個值,這樣消耗的記憶體數量將大大減小,而且允許呼叫函式可以很快的處理前幾個返回值,因此生成器看起來像是乙個函式,但是其本質是迭代器。
1 defmy_range(start,end,step):2 while start <3 yieldstart4 start>
7 for j in my_range(1,20,2):8 print(j)
生成器表示式:生成器表示式,會在程式執行的過程中執行for 後面的**,並對for後面的**進行賦值,而for之前的**以及生成器函式並不會執行,只會進行編譯。生成器不會主動執行任何一行**,必須通過__next__觸發**的執行。
1 res = (i for i in range(1,10) if i != 4) #生成器表示式
2 print(res)3 print(res.__next__())4 print(res.__next__())5 print(res.__next__())6 print(res.__next__())
常用內建方法:(列舉一部分)
#abs 求絕對值。
print(abs(-5))5
#any 只要有乙個為true就返回true。#all 只要有乙個是false就返回false。
n = [0,1,2]print(all(n))print(any(n))
false
true
rint(locals())#當前語句在哪個位置 就會返回哪個位置所儲存的所有的名字
print(globals()) #無論在哪 檢視的都是全域性命名空間
print(chr(97)) #將數字轉換成ascii碼表對應的字元
print(ord('a')) #將字元按照ascii表轉成對應的數字
#dir獲取當前物件命名空間裡面的名字
l = [1,2,3]print(dir(l))
divmod 分頁器print(divmod(55,5))#enumerate 列舉
l = ['a','b']for i,j in enumerate(l,1):print(i,j)#format 三種玩法#1. 是按索引佔位#2. 是按順序佔位#3. 是指名道姓佔位
#isinstance 判斷物件是否屬於某個資料型別
s = 1
print(isinstance(s,list))
3>
python中迭代器 python中的迭代器
如果給定乙個list或tuple,我們可以通過for迴圈來遍歷這個list或tuple,這種遍歷我們稱為迭代 iteration d for key in d print key ac b當我們使用for迴圈時,只要作用於乙個可迭代物件,for迴圈就可以正常執行,而我們不太關心該物件究竟是list還...
python 裝飾器有哪些 裝飾器
由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。def now print 2013 12 25 f now f 2013 12 25 函式物件有乙個 name 屬性,可以拿到函式的名字 now.name now f.name now 現在,假設我們要增強now 函...
什麼是python的迭代器,迭代器有什麼好處
前言 在初級研發或測試面試中總會被問到什麼是python的迭代器,有什麼好處?這個看似很簡單的話題說起來似乎感覺自己並不是特別清楚的能講出來。所以本文記錄下自己查閱很多資料後的總結。什麼是迭代器 迭代器是python最強大的功能之一,是訪問集合元素的一種方式 2.可迭代物件 實現了迭代器協議的物件 ...