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 發布