給妹子講python--15迭代環境

陪伴學習,一路成長。請一起關注,一起點贊吧!

【要點搶先看】

1.使用迭代協議的逐項掃描工具可以稱之為迭代環境n2.迭代環境還包含很多可以傳入可迭代對象的內置方法n3.常用迭代環境:列表解析式n4.可迭代對象優勢總結n

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

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

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

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

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

print(sorted(open(myfile.txt)))nn[goodbyt text filen, hahahahahn, hello text filen]n

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

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

print(list(open(myfile.txt)))nn[hello text filen, goodbyt text filen, hahahahahn]n

print(tuple(open(myfile.txt)))nn(hello text filen, goodbyt text filen, hahahahahn)n

print(&&.join(open(myfile.txt)))nnhello text filen&&goodbyt text filen&&hahahahahn

a,b,c = open(myfile.txt)nprint(a,b,c)nnhello text filengoodbyt text filenHahahahahn

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

L = [1,2,3]nL1 = [x+3 for x in L]n

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

lines = [line.rstrip() for line in open(myfile.txt)]nprint(lines)nn[hello text file, goodbyt text file, hahahahah]n

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

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

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

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

根據需要產生數據,而不是在內存中構建一個結果列表,從而達到節約內存空間的目的,這是可迭代對象最重要的好處。

推薦閱讀:

Python工程師面試必備25條Python知識點
有沒有什麼很好的 Tornado 的教材或者開源項目可以做參考的?
Python 官方的第三方軟體存儲庫——PyPI 上發現10個惡意庫

TAG:Python | 迭代 | 循环 |