2014-04-01 70 views
2

在Python中,能否以類似於以下JavaScript示例的方式定義一個函數(可以包含語句,因此不是lambda表達式)?能否像JavaScript一樣定義函數?

var func = function(param1, param2) { 
    return param1*param2; 
}; 

我問,因爲我想擁有的功能的字典,我不想先定義所有的功能,然後把它們放在一本字典。

我想要一個函數字典的原因是因爲我將另一個函數接受另一個字典作爲參數,通過它的鍵循環,並且如果它在第一個字典中找到一個匹配鍵,則用值調用相關的函數第二個字典作爲參數。像這樣:

def process_dict(d): 
    for k, v in d.items(): 
     if k in function_dict: 
      function_dict[k](v) 

也許還有更多pythonic的方式來完成這樣的事情?

+2

你的功能有多複雜?你的javascript例子可以用python中的lambda來表示:'lambda p1,p2:p1 * p2' –

+0

所以你需要在表達式(字典文字/構造函數)中使用語句嗎?這在Python中是不可能的。 – zch

+0

@zch不,我只是從一個空字典開始,然後在javascript例子中做變量賦值,除了左邊是'function_dict [「key」]'。 –

回答

2

使用類(使用靜態方法)而不是字典來包含你的函數。

class MyFuncs: 

    @staticmethod 
    def func(a, b): 
     return a * b 

    # ... define other functions 

在Python 3,你實際上並不需要@staticmethod因爲類的方法是簡單的功能呢。

我們遍歷:

def process_dict(d): 
    for k, v in d.items(): 
     getattr(MyFuncs, k, lambda *x: None)(*v) 

注:您也可以爲您的功能使用模塊並使用import

+0

是的,這是我一直在尋找的,謝謝! –