首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用概念高级函数(如JavaScript中的)用Python编写纯函数和函数。

使用概念高级函数(如JavaScript中的)用Python编写纯函数和函数。
EN

Stack Overflow用户
提问于 2013-11-19 09:51:43
回答 2查看 325关注 0票数 0

如何在Python中使用高阶函数(返回其他函数的函数)?

这是我的JavaScript示例,我也想在Python中使用它的编程概念。例如,假设我想在HTML元素中包装一个字符串。在JavaScript中,如下所示:

代码语言:javascript
运行
复制
var wrapInElement = function(ele) {
    return function(inp) {
        return "<" + ele + ">" + inp + "</" + ele + ">";
    };
};

然后我会像这样用它:

代码语言:javascript
运行
复制
var names = ["Mike", "Tony", "John"];
names.map(wrapInElement("p"));

在Python中,这看起来如何呢?是否有一种方法可以编写返回自定义函数的函数,如上面的示例所示?我们也可以用Python编写一个类来完成这个任务,但是对于这样一个基本的任务来说,这不是太多了吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-19 09:57:47

在python中,函数是一流的公民,就像javascript中的一样:

代码语言: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也可以编写为:

代码语言:javascript
运行
复制
def adder(n):
    return lambda x: x + n

请注意,功能风格并不完全是pythonic的,如果可能的话,我们更喜欢理解和生成器,而不是高阶函数:

代码语言:javascript
运行
复制
wrapped = ["<p>{}</p>".format(name) for name in names]
票数 4
EN

Stack Overflow用户

发布于 2013-11-19 17:44:44

您的JavaScript示例可以使用部分适用重写(可以说更干净)

代码语言: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中也是如此:

代码语言:javascript
运行
复制
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中都可以使用高阶函数,如果您发现自己返回函数是为了滚动您自己的部分应用程序机制,那么您应该意识到,这种丑陋(出现在两种语言的示例中)是没有必要的,这要归功于那里的可怕的库。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20068215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档