標籤:for pre 運算式 list 分享 索引值 img 替換 函數
列表產生式:[exp for iter_var in iterable]
同樣也會有字典產生式,集合產生式,沒有元組產生式,元組產生式的文法被佔用了
字典產生式,集合產生式,就是外面那個括弧換成{} 字典裡面一個個是索引值對,集合可以與之區分
產生器:有兩種寫法:
一種就是寫一個產生式放到()裡面,這就是一個產生器,
1 #將列表產生式中的[]替換成() 2 ge = (x for x in range(1,6)) 3 print(ge,type(ge)) 4 5 #產生器需要通過next()方法擷取資料,調用一次則返回一個資料 6 print(next(ge)) 7 print(next(ge)) 8 print(next(ge)) 9 print(next(ge))10 print(next(ge))
View Code
yiled運算式
yield語句一次返回一個結果,在每個結果中間,掛起函數的狀態,以便下次重它離開的地方繼續執
1 #通過函數和yield關鍵字產生 2 #使用了 yield 的函數被稱為產生器(generator) 3 #yield語句一次返回一個結果,在每個結果中間,掛起函數的狀態,以便下次從它離開的地方繼續執行 4 def test(n): 5 for i in range(1,n + 1): 6 yield i 7 #print(i) 8 #得到產生器 9 result = test(10)10 print(result)11 12 #產生器只能遍曆一次, 所以下面不會有任何輸出13 for x in result:14 print(x)15
View Code
迭代對象:可以用for in 結構的都是迭代對象,常用的有list , set ,tuple ,dict, str,產生器
判斷是否是迭代器,可以用isinstance(,Iterable)判斷,需要匯入Iterable
1 #引入 from collection import Iterable2 from collections import Iterable3 print(isinstance("",Iterable))#True4 print(isinstance({},Iterable))#True5 print(isinstance((),Iterable))#True6 print(isinstance(1,Iterable))#False
View Code
迭代器:那些產生器都是迭代器,迭代器都是迭代對象,但是迭代對象不一定是迭代器
判斷方式也是用同一個函數參數要換成Iterator 需要匯入Iterator , Iterable
1 from collections import Iterator,Iterable2 print(isinstance([],Iterator)) #False3 print(isinstance((),Iterator)) #False4 print(isinstance({},Iterator)) #False5 print(isinstance("",Iterator)) #False6 print(isinstance((x for x in range(0,6)),Iterator)) #True 產生器是迭代器7 print(isinstance((x for x in range(0,6)),Iterable)) #True 產生器也是迭代對象
迭代器
迭代器可以和迭代對象之間轉換
1 print(isinstance(iter([]),Iterator)) #True2 print(isinstance(iter(()),Iterator)) #True3 print(isinstance(iter({}),Iterator)) #True4 print(isinstance(iter(""),Iterator)) #True5 6 l2 = iter(l1) #將列錶轉換為迭代器7 print(next(l2)) #使用next擷取迭代器中的元素
View Code
python編程基礎之二十七