我发现Python的最新版本有回调方法。 Node仅用于它的回调事件驱动性能。
具有回调方法的大多数可读且可扩展的Python看起来更加甜美。
在CPU使用率/性能/代码优雅方面有哪些具体差异?
答案 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创建函数更好。