Python中期學者必看之生成器表達式和enumerate

前言:當輸入的數據量大於某些數值之後,列表的內存佔用大小變得不可忽視,解決方法就是利用生成器表達式描述列表,避免內存佔用過高,類似於最簡單的for表達式 .

當輸入數據較少時候,必須要用到列表推導,但是如果內存消耗較大,容易導致程序崩潰.通過無休止的循環字元進行操作,久而久之,列表推導也會出現問題,python為此提供了生成器表達式,在每一次運行中生成一項數據.

a = (len(x) for x in open(my_file.txt))>>> print(a)<generator object <genexpr> at 0xadsfjiha***>

上例中演示了如何讀取一份文件並且返回每行字元數,採用生成器表達式,由於是每一次臨時生成,所以不用擔心內存迅速增加佔用的問題 .

生成器表達式也同樣能一起使用,甚至嵌套使用:

>>> list1 = ((x,x**0.5) for x in a)

上述的語法是沒有錯誤的 .


使用enumerate代替range :

核心要點:

(1)enumerate函數提供了一種精簡的寫法,可以在遍歷迭代器時獲知每個元素的索引。

(2)盡量用enumerate來改寫那種將range與下標訪問相結合的序列遍歷代碼。

(3)可以給enumerate提供第二參數,以指定開始計數時所用的值(默認為0)

range在使用中大部分用於創建一系列整數的迭代:

>>> list2 = [sada,safadg,aghfdhd,asfaqwe]>>> for name in list2: print("%s" % list2)

我們訪問其中元素必須獲得其長度以及下標,似乎不便於理解 .

python提供了內建函數:enumerate函數解決這個難題 .

enumerate可使用各個迭代器作為生成器,產出相關值 .

>>> for i,n in enumerate(list3,1):... print(%d:%s% (i,n))... 1:sada2:safadg3:aghfdhd4:asfaqwe

編於2018.2.21


關注我們 , 每天一起探討關於開發中的新鮮事

剛創了個新QQ群:685012311

歡迎大家進來交流,一起進步 !

每天不斷的乾貨 , 助你成長 .


推薦閱讀:

關於在坐標系中旋轉平移物體的理論基礎解析
從零開始手敲次世代遊戲引擎(DX12特別篇)
沈向洋:You Are What You Write,大家都要看
加碼編程,少年創學院尋找新業務增長點
LCUI 1.0 Beta 發布

TAG:Python | 編程 | 軟體開發 |