【问题标题】:Can one define functions like in JavaScript?可以像 JavaScript 那样定义函数吗?
【发布时间】:2014-04-01 23:48:28
【问题描述】:

在 Python 中,是否可以以类似于以下 JavaScript 示例的方式定义一个函数(其中可以包含语句,因此不是 lambda)?

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 的方式来完成这样的事情?

【问题讨论】:

  • 你的函数有多复杂?您的 javascript 示例可以用 python 中的 lambda 表示:lambda p1, p2: p1 * p2
  • 所以您需要在表达式(字典文字/构造函数)中添加一个语句?这在 Python 中是不可能的。
  • @zch 不,我只是从一个空字典开始,然后像 javascript 示例中那样进行变量赋值,除了左侧是 function_dict["key"]
  • @IvanNevostruev 我认为其中一些过于复杂(许多分支)且冗长而无法制作 lambda 语句,即使它可能会起作用。

标签: python function dictionary lambda


【解决方案1】:

使用类(带有静态方法)而不是字典来包含您的函数。

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

【讨论】:

    猜你喜欢
    • 2017-09-13
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 2012-06-15
    • 2020-01-15
    相关资源
    最近更新 更多