让我们说我想要一个产生函数(闭包)的函数,它将它们的参数乘以工厂函数的参数。
JavaScript中的示例:
function get_mult_by(m) {
return function(x) {
return m * x;
}
}
在Python中,我可以返回lambda
:
def get_mult_by(m):
return lambda x: m * x
但是如果我想返回一个正常的函数,事情会变得更复杂,也不那么简单(从命名函数的必要性开始):
def get_mult_by(m):
def mult(x):
# do something else
return m * x
return mult
这方面的最佳做法是什么?
答案 0 :(得分:1)
我认为这没什么大不了的。如果函数是一个简单的表达式,我可能会像第一个例子中那样返回lambda
,但使用命名函数应该不是问题。与命名函数大小写相当的JavaScript将是:
function get_mult_by(m) {
var mult;
mult = function(x) {
return m * x;
}
return mult;
}
换句话说,只需将其视为用于创建返回值的本地。
答案 1 :(得分:0)
他们是一样的。对你提问,我认为使用lambda更加pythonic。 实际上,如果您不导入其他包,则甚至无法使用类型函数区分它们:
In [4]: type(lambda x: 1)
Out[4]: function
In [5]: def f():
...: pass
...:
In [6]: type(f)
Out[6]: function
如果您认为复杂的方式更好,那就干一切顺其自然。