給妹子講python-S01E15詳解python迭代環境

醬油哥在掘金發表於2018-08-05

歡迎關注公眾號:python資料科學家

【要點搶先看】

1.使用迭代協議的逐項掃描工具可以稱之為迭代環境
2.迭代環境還包含很多可以傳入可迭代物件的內建方法
3.常用迭代環境:列表解析式
4.可迭代物件優勢總結

【妹子說】這幾節都在談論迭代這個話題呀。

是啊,作為對上一節的補充,這一節我們繼續來說說迭代環境這個話題。

Python中,從左到右掃描的每種工具都使用了之前介紹的迭代協議,都可以稱之為迭代環境,如for迴圈表示式、列表解析式、in成員關係測試,map內建函式,sorted和zip等呼叫等,都可以傳入一個可迭代物件,進行迭代。

Sorted對可迭代物件中的各項進行排序,zip對可迭代物件中的各項進行組合,enumerate對可迭代物件中的各項進行位置值配對,他們都接受一個可迭代物件作為引數。

同時zip、enumerate和filter呼叫的結果是返回一個可迭代物件,可以利用list函式呼叫來進行展現。只有sorted函式的結果是返回一個真正的列表。

print(sorted(open('myfile.txt')))

['goodbyt text file\n''hahahahah\n''hello text file\n']
複製程式碼

當然,還包括一些其他的內建方法,如sum,any,all,max,min都可以傳入任何可迭代物件。本質是接受任何可迭代物件作為一個引數,並且使用迭代協議來掃描處理,並返回結果。

更擴充套件的來說,一般意義上,能從左到右的掃描一個物件的各種工具,實質上都在主體物件上使用了迭代協議,這麼看的話,還包括了list和tuple、set內建函式,他們也是通過迭代協議掃描可迭代物件,構建新的物件。還有字串join方法,它將一個子字串放置到一個被包含在可迭代物件的字串之間,這麼想想,迭代的概念確實在python中無處不在,甚至包括賦值,也有這麼點味道。看看下面分別舉的幾個例子。

print(list(open('myfile.txt')))

['hello text file\n''goodbyt text file\n''hahahahah\n']
複製程式碼

-

print(tuple(open('myfile.txt')))

('hello text file\n''goodbyt text file\n''hahahahah\n')
複製程式碼

-

print('&&'.join(open('myfile.txt')))

hello text file
&&goodbyt text file
&&hahahahah
複製程式碼

-

a,b,c = open('myfile.txt')
print(a,b,c)

hello text file
goodbyt text file
Hahahahah
複製程式碼

我們最後倆回顧一下列表解析式。列表解析式也是最常應用迭代協議的環境之一,他與for迴圈一起使用。

L = [1,2,3]
L1 = [x+3 for x in L]
複製程式碼

Python在直譯器內部執行一個遍歷L的迭代,按照順序把X賦給每個元素,並且對各元素執行左邊的表示式,並將結果收集為一個列表,我們得到的結果列表就是列表解析所表達的內容,上面的例子中包含了針對L中每個元素x執行x+3的一個新列表。這種列表解析的方式比手動的for迴圈更快,因為他們的迭代在直譯器內部是以C語言的速度執行的。

lines = [line.rstrip() for line in open('myfile.txt')]
print(lines)

['hello text file''goodbyt text file''hahahahah']
複製程式碼

【妹子說】這幾節可是被迭代二字反覆轟炸呀,先介紹了迴圈迭代的基本用法和高階技巧,然後介紹了迭代協議、可迭代物件以及迭代器,最後學習了迭代環境。

對,內容不少啊。最後我們再次總結一下可迭代物件的好處:

如果函式返回的結果是可迭代物件,那麼他意味著是根據請求依次一個一個的返回結果,而不是一次性的構建整個列表。這可以節約記憶體,根據需要產生結果。這對較大的程式來說很有用,在計算很大的結果列表的時候,像這樣做,能很好的節約記憶體。

本節介紹的字典的一些方法keys、values、items以及內建函式range、map、zip、filter都是如此,他們都會返回可迭代物件。

根據需要產生資料,而不是在記憶體中構建一個結果列表,從而達到節約記憶體空間的目的,這是可迭代物件最重要的好處。

公眾號二維碼:python資料科學家:

給妹子講python-S01E15詳解python迭代環境

相關文章