close
7.8 這就是講 currying ,一般在用函式的時候,參數都要帶足才能用,currying 允許你,可以先給部分參數就好,然後回傳另外一個函式出來,你需要的時候,再把剩下的參數帶進去呼叫。Python 裡不需要另外自己實作,只要引用 functools 模組裡的 partial 即可。

除了舉出這個例子外,還提供其他應用作為參考,像是也可以應用在類別的建構子上,或是簡化函數所帶的參數等等。

7.9 把只有一個方法的類別改寫為函式:因為類別都要先初始化才能使用,這裡舉的例子,就是把這樣的類別改寫為函式,而函式裡再隱藏了一個函式,藉著這樣的機制,避免掉類別初始化的繁瑣。

7.10 讓 callback 函式多點變化:大部分情況下,callback 函式就只是傳參數進去呼叫;在某些時候會想要多輸出一些額外的資訊,但 callback 函式沒辦法記錄,這時候可以利用類別或是 7.9 提到的 closure 函式來記錄額外的資訊,就可以了。
另外也可以搭配 partial 來做更多的應用。

7.11 舉的例子有點複雜,我想他的意思應該是可以應用 functools.wraps 把函式包成 decorator 之後來使用。不過我還是看不太懂。

7.12 這個很妙,利用函數也是一個 first-class object 的特性,把函式指派為函式物件裡的 Method。藉著這個,就可以搭配 closure 做出一些應用。


補充:剛剛找了解說 wraps 的文章,講的很清楚,原來使用 decorator 的時候,你得到的函式資訊是 decorate 過的,functools.wraps 就是用來解決這問題,他會保留原來函式的資訊。

arrow
arrow

    elleryq 發表在 痞客邦 留言(0) 人氣()