Python 代碼閱讀合集介紹:為什么不推薦Python初學者直接看專案原始碼
本篇閱讀的代碼實作使用一個初始化種子和迭代函式,通過嵌套函式對初始化種子進行迭代,最終生成一個串列,
本篇閱讀的代碼片段來自于30-seconds-of-python,
unfold
def unfold(fn, seed):
def fn_generator(val):
while True:
val = fn(val[1])
if val == False: break
yield val[0]
return [i for i in fn_generator([None, seed])]
# EXAMPLES
f = lambda n: False if n > 50 else [-n, n + 10]
unfold(f, 10) # [-10, -20, -30, -40, -50]
unfold函式接收一個迭代函式和一個初始化種子,生成一個串列,迭代函式fn接受一個引數seed,并且必須總是回傳一個有兩個元素的串列[value,nextSeed],或者回傳False來終止生成器函式,unfold函式內部定義生成器fn_generator,該生成器使用while回圈呼叫迭代器函式并產生值,直到它回傳False,最后使用串列推導式回傳生成器函式產生的串列,
生成器是一個用于創建迭代器的簡單而強大的工具, 它的寫法類似于標準的函式,但當它們要回傳資料時會使用yield陳述句, 每次在生成器上呼叫next()時,它會從上次離開的位置恢復執行(它會記住上次執行陳述句時的所有資料值),
fn_generator是一個生成器,在其中while陳述句的最后,使用yield回傳當前while回圈中val[0]的值,下一次呼叫的時候,會繼續下一個回圈,繼續回傳下一個回圈中val[0]的值,直到迭代函式fn回傳false結束while回圈,
在unfold函式的return陳述句中,使用串列推導式不斷呼叫fn_generator生成器,直到生成器退出回圈,形成一個串列并回傳,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/346865.html
標籤:Python
