在ep.9的結(jié)尾黑子提到
因?yàn)槿蜃償?shù)濫用的問(wèn)題,python直接禁止了函式中的功能,讓函式只能讀全域變數(shù)不能亂改,那如果真的還是很想在函式中隊(duì)全域變數(shù)進(jìn)行修改要怎麼做?
我們會(huì)使用到 global 這個(gè)指令
可以看到a明顯在 out() 函式執(zhí)行之後,直接被改掉了
nonlocal 這個(gè)指令也可以達(dá)到相同效果(在只有單層指令的情況下,正常情況我們也不會(huì)在函式裡面在塞一個(gè)函式在裡面)
然後接著介紹一個(gè)指令 yield
用下面三個(gè)函式來(lái)進(jìn)行說(shuō)明
首先 normal(5)
只會(huì)跳出一次,因?yàn)閞eturn在for迴圈裡面,跑一次就丟出一個(gè)值1
然後 pro(5)
return在for迴圈外面,所以印了五次,才return一個(gè)值5
然而list(pro(5)) 我們要把pro(5)放到容器中,直接跳出錯(cuò)誤
gen(5),雖然印出來(lái)看起來(lái)怪怪的
但用list(gen(5)),就可以順利的把1~5放到容器list之中
也可以看下面的例子
總結(jié)來(lái)說(shuō),return在for迴圈之中,還是只會(huì)傳出一次
(我們?cè)趀p.9知道說(shuō)return可以用tuple形式呈現(xiàn)多個(gè)值,但還是只有回傳一次)
所以利用yield 讓我們可以得到多次的回傳,並且可以將回傳值放到容器裡面
接著介紹函式 lambda,類(lèi)似生成式的使用方式
lambda 是簡(jiǎn)易形式的函式,用完即丟,不著痕跡,適合用來(lái)處理幾行程式碼就能完成的函式
然後進(jìn)階版 將lambda跟 sort中的函式
lambda 後面的 i 就直接是其中一組的學(xué)生資料,於是用學(xué)生中的座號(hào)作為排序的標(biāo)的
關(guān)於sort key的使用方法,同樣可以
參考ep.6
延伸閱讀
遞迴函式(讓函式可以呼叫自己,注意起始值跟終止值)
這個(gè)有空再來(lái)補(bǔ)囉