如何在Python中使用高阶函数(返回其他函数的函数)?
这是我的JavaScript示例,我也想在Python中使用它的编程概念。例如,假设我想在HTML元素中包装一个字符串。在JavaScript中,如下所示:
var wrapInElement = function(ele) {
return function(inp) {
return "<" + ele + ">" + inp + "</" + ele + ">";
};
};然后我会像这样用它:
var names = ["Mike", "Tony", "John"];
names.map(wrapInElement("p"));在Python中,这看起来如何呢?是否有一种方法可以编写返回自定义函数的函数,如上面的示例所示?我们也可以用Python编写一个类来完成这个任务,但是对于这样一个基本的任务来说,这不是太多了吗?
发布于 2013-11-19 09:57:47
在python中,函数是一流的公民,就像javascript中的一样:
def adder(n):
def add_func(x):
return x + n
return add_func
add3 = adder(3)
print map(add3, [1,2,3]) # [4, 5, 6]这不是唯一的选项,例如,adder也可以编写为:
def adder(n):
return lambda x: x + n请注意,功能风格并不完全是pythonic的,如果可能的话,我们更喜欢理解和生成器,而不是高阶函数:
wrapped = ["<p>{}</p>".format(name) for name in names]发布于 2013-11-19 17:44:44
您的JavaScript示例可以使用部分适用重写(可以说更干净)
// depends on `_` -- see link above
function wrapInElement(ele, inp) {
return "<" + ele + ">" + inp + "</" + ele + ">";
};
var f = _.partial(wrapInElement, "p")
... then use f as a normal function ...在Python中也是如此:
from functools import partial
def wrap_in_element(ele, inp):
return "<%s>%s</%s>" % (ele, inp, ele)
f = partial(wrap_in_element, "p")
... then use f as a normal function ...是的,在Python和JavaScript中都可以使用高阶函数,如果您发现自己返回函数是为了滚动您自己的部分应用程序机制,那么您应该意识到,这种丑陋(出现在两种语言的示例中)是没有必要的,这要归功于那里的可怕的库。
https://stackoverflow.com/questions/20068215
复制相似问题