Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建函数:(f,n),它返回f(f(f(…x…))n次_Python_Function_Recursion_Function Composition - Fatal编程技术网

Python 创建函数:(f,n),它返回f(f(f(…x…))n次

Python 创建函数:(f,n),它返回f(f(f(…x…))n次,python,function,recursion,function-composition,Python,Function,Recursion,Function Composition,我在python中创建一个高阶函数时遇到了问题,该函数应用函数f,n次以生成一个新函数h作为其返回值 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))) 由于Python函数是一流的公民,因此函数本身可以定义一个新函数并返回它。在函数中定义函数可以使用

我在python中创建一个高阶函数时遇到了问题,该函数应用函数f,n次以生成一个新函数h作为其返回值

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)))

由于Python函数是一流的公民,因此函数本身可以定义一个新函数并返回它。在函数中定义函数可以使用
def
完成,方法与在顶级范围中定义函数相同

作为旁注,我建议您不要将
compile
用作函数名,因为它不能准确反映您正在尝试执行的操作,即所谓的函数组合,也不能覆盖内置函数
compile

def compose_with_self(f, n):
    def composed(arg):
        for _ in range(n):
            arg = f(arg)
        return arg
    return composed
例如:

def add_one(x):
    return x + 1

add_three = compose_with_self(add_one, 3)

print(add_three(1)) # 4

由于Python函数是一流的公民,因此函数本身可以定义一个新函数并返回它。在函数中定义函数可以使用
def
完成,方法与在顶级范围中定义函数相同

作为旁注,我建议您不要将
compile
用作函数名,因为它不能准确反映您正在尝试执行的操作,即所谓的函数组合,也不能覆盖内置函数
compile

def compose_with_self(f, n):
    def composed(arg):
        for _ in range(n):
            arg = f(arg)
        return arg
    return composed
例如:

def add_one(x):
    return x + 1

add_three = compose_with_self(add_one, 3)

print(add_three(1)) # 4

使用递归可以很容易地做到这一点

  • 如果
    n
    为零,只需返回
    x
  • 否则,
    n
    至少为1,将
    f(x)
    应用于递归结果
    compile(f,n-1)
我们可以很容易地用Python对其进行编码

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

使用递归可以很容易地做到这一点

  • 如果
    n
    为零,只需返回
    x
  • 否则,
    n
    至少为1,将
    f(x)
    应用于递归结果
    compile(f,n-1)
我们可以很容易地用Python对其进行编码

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

请阅读与您的问题无关的内容:
compile
是一个Python内置函数,因此您可能不应该使用该名称编写自己的函数。这样做会屏蔽内置函数(如果您想使用原始的
编译
),可能会导致错误。请阅读与您的问题无关的内容:
编译
是Python内置函数,因此您可能不应该使用该名称编写自己的函数。这样做会屏蔽内置函数(如果您想使用原始的
编译
,则可能会导致错误)。