python回调vs节点回调点对点比较

时间:2013-11-17 02:15:08

标签: python node.js callback hardware

我发现Python的最新版本有回调方法。 Node仅用于它的回调事件驱动性能。

具有回调方法的大多数可读且可扩展的Python看起来更加甜美。

在CPU使用率/性能/代码优雅方面有哪些具体差异?

1 个答案:

答案 0 :(得分:1)

记住一件事,Python不像Node.js那样异步。但他们都有一阶函数。这意味着,您可以动态创建新函数,将它们作为参数传递,从其他函数返回它们,将它们存储在变量中。

需要注意的重要一点是,python中的动态函数创建机制是通过lambda关键字实现的,这些函数称为lambda函数。 lambda函数非常严格。它们只能包含一个表达式,甚至不包含单个语句。考虑这个例子,

fs.readFile("filename", function(err, content) {
    if (err) {
       console.error(err);
    } else {
       console.log(content.toString());
    }
});

正如您所看到的,我们已经定义了一个内联函数,并且只有在readFile调用完成读取文件时才会使用一次。你不能在python中定义这样的函数,你可以创建一个函数来完成任何必须完成的工作,然后将函数名作为参数传递。

性能方面,我真的不认为我可以比较它们,但我们假设我们正在循环中执行上面看到的readFile函数。在javascript中,内联函数必须多次创建,才能传递给readFile但是在python中,因为那不是一个选项,我们不必每次都创建新函数,我们可以定义一次并始终使用它。这就是为什么lambda在python中有点慢,因为它们必须在执行语句时创建。你可以通过这个例子看到这个

from timeit import timeit
print timeit('sorted(["abcd", "abc", "ab", "a"], key=lambda x:len(x))')
print timeit('sorted(["abcd", "abc", "ab", "a"], key=len)')

在第一个版本中,我们正在创建一个新的lambda函数,它为我们提供了相应迭代中每个元素的长度。在第二个版本中,我们直接使用内置函数len。当我在我的机器上执行这段代码时,我得到了

1.33205795288
0.976922988892

因此,使用已定义的函数比使用lambdas创建函数更好。