用生成器來改寫直接返回列表的函式方法

2022-10-04 21:12:21 字數 918 閱讀 4397

本文是一篇關於《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記憶體錯誤或者導致程式在執行時出現卡頓的情況 列表生成器 會建立乙個列表生成器物件,不會一次性的把所有結果都計算出來,如果需要獲取資料,可以使用...