2014-04-01 24 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

是的,这是我一直在寻找的,谢谢! –