使用诸如JavaScript中的高阶函数的概念,用Python编写纯代码和函数代码

使用诸如JavaScript中的高阶函数的概念,用Python编写纯代码和函数代码,javascript,python,functional-programming,higher-order-functions,Javascript,Python,Functional Programming,Higher Order Functions,在Python中如何使用高阶函数(返回其他函数的函数) 这是我的JavaScript示例,我也想在Python中使用它的编程概念。 比方说,我想在HTML元素中包装一个字符串。在JavaScript中,它将如下所示: var wrapInElement = function(ele) { return function(inp) { return "<" + ele + ">" + inp + "</" + ele + ">"; }; };

在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编写一个类来完成这项任务,但对于这样一项基本任务来说,这不是太多了吗?

在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]
这不是唯一的选项,例如,
加法器
也可以写成:

def adder(n):
    return lambda x: x + n
请注意,函数式风格不是很像python,如果可能,我们更喜欢理解和生成器,而不是高阶函数:

wrapped = ["<p>{}</p>".format(name) for name in names]
wrapped=[“{}

”。名称中名称的格式(名称)
在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]
这不是唯一的选项,例如,
加法器
也可以写成:

def adder(n):
    return lambda x: x + n
请注意,函数式风格不是很像python,如果可能,我们更喜欢理解和生成器,而不是高阶函数:

wrapped = ["<p>{}</p>".format(name) for name in names]
wrapped=[“{}

”。名称中名称的格式(名称)
可以使用以下方法重写JavaScript示例(可以说更干净):

//依赖于``--参见上面的链接
功能包装元件(ele、inp){
返回“+inp+”;
};
变量f=部分(wrapInElement,“p”)
... 然后用f作为正规函数。。。
在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 ...
从functools导入部分
def封装元件(ele、inp):
返回“%s%”(ele、inp、ele)
f=部分(在元素“p”中包裹)
... 然后用f作为正规函数。。。

虽然可以,但在Python和JavaScript中都可以使用高阶函数,如果您发现自己返回函数以运行自己的部分应用程序机制,您应该意识到这一点(这在两种语言的示例中都有体现)由于有非常棒的库,所以没有必要使用它。

您的JavaScript示例可以使用以下方法重写(可以说更干净):

//依赖于``--参见上面的链接
功能包装元件(ele、inp){
返回“+inp+”;
};
变量f=部分(wrapInElement,“p”)
... 然后用f作为正规函数。。。
在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 ...
从functools导入部分
def封装元件(ele、inp):
返回“%s%”(ele、inp、ele)
f=部分(在元素“p”中包裹)
... 然后用f作为正规函数。。。

虽然可以,但在Python和JavaScript中都可以使用高阶函数,如果您发现自己返回函数以运行自己的部分应用程序机制,您应该意识到这一点(这在两种语言的示例中都有体现)由于有非常棒的库,所以没有必要这样做。

您尝试过将JS代码翻译成Python吗?你试过什么吗?事实上,我非常确定它不会那样工作,所以我没有尝试提供的解决方案。我可能应该这样做,因为人们真的可以把它一对一地翻译。你有没有试着把你的JS代码翻译成Python?你试过什么吗?事实上,我非常确定它不会那样工作,所以我没有尝试提供的解决方案。我可能应该这样做,因为人们真的可以把它一一翻译。让我强调一个事实,这个解决方案比我标记为正确答案的解决方案更简单。我不知道部分应用程序,无论是JavaScript还是Python。这很有趣。谢谢。让我强调一个事实,这个解决方案比我标记为正确答案的解决方案更简单。我不知道部分应用程序,无论是JavaScript还是Python。这很有趣。非常感谢。