所有,python,函數組合通過名稱並鏈接它們以調用in-a-go?
下面我有混淆可能需要你的幫助
假設我有一個基於行的可變長度的數據矩陣
93 77 96 85
50 69 54 16
39 91 59 38
64 30 18 50
43 9 74 94
44 87 95 89
...
我想通過上面不同的源產生的結果數據生成算法,同時選擇不同的範圍選擇算法,例如下面的代碼
lsrc = [# above data]
def rangesel_001(lsrc):
tmp = []
for i in len(lsrc):
if i % 2 = 0:
tmp.append(lsrc[i])
return tmp
def algo_001(lsrc):
tmp = []
for i in len(lsrc):
tmp.append([x+1 for x in lsrc[i]])
return tmp
所以我想要的數據是:
dscl = algo_001(rangesel_001(lsrc))
這裏來是我的問題:
假設我有一個可擴展的「rangesel」設置和「ALGO」也是擴展長相這樣
rangesel_001() algo_001()
rangesel_002() algo_002()
rangesel_003() algo_003()
… ...
我想將它們混合,然後調用它們-A-去得到所有的結果,我想要什麼
rangesel_001 + algo_001
rangesel_001 + algo_002
rangesel_001 + algo_003
rangesel_002 + algo_001
rangesel_002 + algo_002
rangesel_002 + algo_003
...
有沒有一種方法可以輕鬆管理這些函數名,然後將它們結合起來執行?
2.你可能注意到了不同的部分「rangesel」 S和「算法中」 S算法,這裏摘錄:
if i % 2 = 0:
and
[x+1 for x in lsrc[i]]
它有沒有辦法從函數定義確切的公共部分出來,我可以給一些列表:
if i % 2 = 0 rangesel_001
if i % 3 = 0 rangesel_002
if i % 4 = 0 rangesel_003
and
[x+1 for x in lsrc[i]] algo_001
[x/2 for x in lsrc[i]] algo_002
那麼我可以得到所有的「rangeset」函數和「算法」集?
也許以後我需要這樣的:
dscl = algo_001(rangesel_001( \
algo_002(rangesel_002(lsrc)) \
))
是這樣,有一個painfulless我所能鏈那些 「rangesel_002 + algo_001」 組合? 例如:假設我已經有完整的組合
rangesel_001 + algo_001
rangesel_001 + algo_002
rangesel_001 + algo_003
rangesel_002 + algo_001
rangesel_002 + algo_002
rangesel_002 + algo_003
現在我要挑隨機3鏈他們,並調用得到結果列表?
dscl = random_pick(3, combination_list, lsrc)
謝謝!然後
def compose(f, g):
return lambda *x: f(g(*x))
,您可以::
感謝Gerg,我可否知道lambda是否可以支持可變參數?例如列表給予? – user478514 2010-10-26 05:11:51
爲什麼不使用'defcommand(* args,** kwargs):...'和'returncomb'呢? – detly 2010-10-26 05:20:27
@ user478514:是的,我將更改我的示例以顯示使用Python'*'表示法。 – 2010-10-26 05:55:37