首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建函数:(f,n)返回f(.x..。)))N次

创建函数:(f,n)返回f(.x..。)))N次
EN

Stack Overflow用户
提问于 2018-05-31 02:18:08
回答 2查看 203关注 0票数 0

我很难在python中创建一个高阶函数,它将函数f,n次应用于生成一个新函数h,作为它的返回值。

代码语言:javascript
复制
def compile(f, n)
    # h is a function, f applied n times
    ...
    return h

new = compile(lambda x: 2*x, 3)
new(4) == 32 # new(4) == 2(2(2(4)))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-31 02:44:40

因为Python的函数是一流的公民,所以函数本身可以定义一个新函数并返回它。在函数中定义函数可以用def完成,就像在您的顶级范围内一样。

作为一个副词,我建议您不要使用compile作为函数名,因为它不能准确地反映您想要做的事情,这称为函数组合,以及覆盖内置函数compile

代码语言:javascript
复制
def compose_with_self(f, n):
    def composed(arg):
        for _ in range(n):
            arg = f(arg)
        return arg
    return composed

示例:

代码语言:javascript
复制
def add_one(x):
    return x + 1

add_three = compose_with_self(add_one, 3)

print(add_three(1)) # 4
票数 3
EN

Stack Overflow用户

发布于 2018-05-31 16:05:47

您可以使用递归轻松地完成这一任务。

  • 如果n为零,只需返回x
  • 否则,n至少为1,将f(x)应用于递归结果compile (f, n - 1)

我们可以轻松地用Python对其进行编码。

代码语言:javascript
复制
def compile (f, n):
  return lambda x: \
    x if n is 0 else compile (f, n - 1) (f (x))

double_thrice = compile (lambda x: 2 * x, 3)

print (double_thrice (4))
# 32
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50615723

复制
相关文章

相似问题

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