2014-04-17 15 views
1

我有不同的函數,但每個函數都有不同數量的參數和不同的參數。我希望能夠只執行其中的一個,並根據函數的名稱作爲字符串來執行此操作。我嘗試這樣做:根據參數 - 它的名字選擇執行哪個函數 - Python3.3

def execute_function(function_name, arg1, arg2, arg3): 
    return { 
     'func1': func1(arg1), 
     'func2': func2(arg1, arg3), 
     'func3': func3(arg2), 
    }[function_name] 

但無論怎樣都是字符串function_name執行所有功能:(

你有任何想法,爲什麼發生這種情況,以及如何達到我想要的(我。新的Python)。非常感謝你提前!:)

+0

用'{....} .get(function_name,default)()'添加一個默認函數如果你錯誤的函數名稱pass! 'default(){print(「Exception:Undefined function called ..」)}' –

回答

5

你需要添加只是功能到字典;你添加了他們的結果

爲了支持可變參數,使用lambda表達式或functools.partial()來包裝你的函數,而不是:

def execute_function(function_name, arg1, arg2, arg3): 
    return { 
     'func1': lambda: func1(arg1), 
     'func2': lambda: func2(arg1, arg3), 
     'func3': lambda: func3(arg2), 
    }[function_name]() 

from functools import partial 

def execute_function(function_name, arg1, arg2, arg3): 
    return { 
     'func1': partial(func1, arg1), 
     'func2': partial(func2, arg1, arg3), 
     'func3': partial(func3, arg2), 
    }[function_name]() 

在你調用生成的對象這兩種情況下(partiallambda功能)之後從字典中檢索它。

+0

Oooh,非常感謝!我現在很慚愧,似乎很明顯,爲什麼他們都被稱爲:$非常感謝您消除我的困惑和解決方案! – Faery