本文是一篇關於《effective python》書中一節的學習筆記,記錄了示例**和思路。
如果函式要產生一系列結果,那麼最簡單的做法就是把這些結果都放在乙個列表裡返回。
比如我們要查出字串中每個詞的首字母在整串字串中的位置:
def index_word(text):
result=
if text:
result.append(0)
for index,letter in enumerate(text):
if letter == ' ':
result.append(index+1)
return result
該函式的使用:
這個函式思路很明了,但存在的問題在於**擁擠、冗餘。返回前要把所有結果都放在列表裡,程式設計客棧如果輸入量巨大,則程式可能會耗盡記憶體發生崩潰。
這個函式改用生成器(generator)來寫會更好。可以對應任意長度的資料,不會影響到執行時所耗記憶體。
生成器是使用y程式設計客棧ield表示式的函式。呼叫生成器函式時,它並不會真的執行,而是會返回迭代器。每次在這個迭代器上面呼叫內建的next函式時,迭代器會把生成器推進到下乙個yield表示式那裡。生成器傳給yield的每乙個值,都會由迭代器返回給呼叫者。
def index_word_iter(text):
if text:
yield 0
for index,letter in enumerate(text):
if lettzhfwdsvjer程式設計客棧 == ' ':
yield index+1
需要注意的是:函式返回的迭代器,只能產生一輪結果,如果繼續迭代第二輪,是不會再有結果的。
本文標題: 用生成器來改寫直接返回列表的函式方法
本文位址: /jiaoben/python/192117.html
Python 考慮用生成器改寫直接返回列表的函式
使用生成器的好處是顯而易見的,可以使 更加清晰,同時減小記憶體的消耗,當函式需要返回列表,把函式改寫為生成器是相對容易的。下面這兩個函式返回字串中每個單詞的索引 1 defindex words1 text 2 result 3if text 45 for index,letter in enume...
Python 考慮用生成器改寫直接返回列表的函式
使用生成器的好處是顯而易見的,可以使 更加清晰,同時減小記憶體的消耗,當函式需要返回列表,把函式改寫為生成器是相對容易的。下面這兩個函式返回字串中每個單詞的索引 1 defindex words1 text 2 result 3if text 45 for index,letter in enume...
python列表生成式與列表生成器的使用
列表生成式 會將所有的結果全部計算aiotpoa出來,把結果存放到記憶體中,如果列表中資料比較多,就會占用過多的記憶體空間,可能會導致memoryerror記憶體錯誤或者導致程式在執行時出現卡頓的情況 列表生成器 會建立乙個列表生成器物件,不會一次性的把所有結果都計算出來,如果需要獲取資料,可以使用...