返回函数的函数(在python中)

2024-10-02 22:26:19 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以创建一个函数,将lambda函数作为参数(每个lambda函数都使用参数x),然后返回一个新函数,该函数有一个参数x,并返回所有lambda函数的乘积?你知道吗

以下是我的非工作示例:

def func_you( lambdafunc1, lambdafunc2, lambdafunc3, lambdafunc4):
    return def func_you_2(x):
        return lambdafunc1(x) * lambdafunc2(x) * lambdafunc3(x) * lambdafunc4(x)

所以本质上是一个函数func_you,它接受4个lambda函数,每个函数都使用参数x。例如,lambdafunc1的参数可以类似于lambda x: x + 10。你知道吗

func_you然后返回一个名为func_you_2的新函数,该函数的输出是所有lambda函数的乘积,并且有一个参数x,该参数传递给func_you的每个lambda函数的x参数。你知道吗

假设我要做的是可能的,我该如何传达正确的语法来做呢?你知道吗

还有,这类东西有没有一个特定的名称而不是“返回函数的函数”?从技术上讲,它不是嵌套函数,对吧?你知道吗


Tags: lambda函数you示例参数returndef语法
3条回答

到目前为止,我的答案并不比其他任何答案都好,但我想稍微调整一下,从问题中挤出一点函数式编程的精华,只是为了好玩。你知道吗

from functools import reduce
from operator import mul

def functioners(*funcs):
    def inner(x):
        return reduce(mul, [f(x) for f in funcs], 1)
    return inner

In [2]: res = functioners(lambda x: x+1, lambda x: x *2, lambda x: x+3)

In [3]: res(5)
Out[3]: 480

In [4]: res = functioners(lambda x: x+1, lambda x: x +1, lambda x: x+1)

In [5]: res(1)
Out[5]: 8

编辑

为了实现一种10分钟的讨好尝试,我甚至变得有点疯狂。这不是什么我会让我的同事,但它的晚了,所以我可能只是为了好玩。。。你知道吗

应该可以定义一个函数,它可以不断返回自己的部分应用版本,但我想您需要某种方法来告诉它停止吗?你知道吗

以下是我的尝试:

from functools import partial, reduce
from operator import mul

def functionals(*funcs, finished=None):
    def inner(x):
        return reduce(mul, [f(x) for f in funcs], 1)

    if finished is not None:
        # stop condition
        return inner
    else:
        return partial(functionals, *funcs)

你可以像这样使用它(如果你这么想……)

In [37]: f1 = functionals(lambda x: x+1)

In [38]: f2 = f1(lambda x: x + 1)

In [39]: f3 = f2(lambda x: x + 1, lambda x: x + 1, lambda x: x + 1)

In [40]: f3(finished="definitely!")(1)
Out[40]: 32

(我现在就去拿帽子和外套……)

您可以返回一个lambda函数来执行您想要的操作。示例-

def func_you( lambdafunc1, lambdafunc2, lambdafunc3, lambdafunc4):
    return lambda x: lambdafunc1(x) * lambdafunc2(x) * lambdafunc3(x) * lambdafunc4(x)

演示-

>>> def func_you( lambdafunc1, lambdafunc2, lambdafunc3, lambdafunc4):
...     return lambda x: lambdafunc1(x) * lambdafunc2(x) * lambdafunc3(x) * lambdafunc4(x)
...
>>> f = func_you(sum,min,max,sum)
>>> f([1,2])
18

从技术上讲,这绝对是一个嵌套函数:

def func_you(lambdafunc1, lambdafunc2, lambdafunc3, lambdafunc4):
    def func_you_2(x):
        return lambdafunc1(x) * lambdafunc2(x) * lambdafunc3(x) * lambdafunc4(x)

    return func_you_2

但是你也可以用lambda

def func_you(lambdafunc1, lambdafunc2, lambdafunc3, lambdafunc4):
    return lambda x: lambdafunc1(x) * lambdafunc2(x) * lambdafunc3(x) * lambdafunc4(x)

相关问题 更多 >