Pages

Tuesday, September 26, 2006

visitor/command

老實說我搞不清楚這算哪個 pattern,所以一起列出來

假設有三個函式 f1, f2, f3 定義如下

def f1(s): return s+'-1' def f2(s): return s+'-2' def f3(s): return s+'-3'

想把一筆資料依序丟進 f1 f2 f3 處理 (這邊簡單加上一個 suffix 代表處理過) 最後會得到新的結果,這相當於丟進一個 (f3。f2。f1)() 函式裡 其實很直覺就會這樣寫

f3(f2(f1(data)))

不過萬一 pipeline 很長,就變成要一直套上去 pipeline 需要更動的話,這樣寫也不好維護 但在 python 中,其實有另一種處理方式

def process(data, flist): return reduce(lambda s,f:f(s), [data]+flist)

往後只要編輯好一個 function list,連同待處理資料一起丟進去

filters = [f1,f2,f3] result = process('img', filters)

得到的 result 就會是 'img-1-2-3'

一般支援部份 functional 的程式語言應該都辦得到 這個可以用在哪裡呢?我都寫那麼清楚應該不用再多說了 事實上我就是拿來處理影像用的,而且的確很方便 當然也有很多其他的用途啦,就看怎麼應用了


This article was originally posted on this site.

No comments:

Post a Comment