函数调用3个或更多参数输入字段 - function()()()

Tes*_*360 5 python function

我正在研究Python中函数的属性,我遇到了一个练习,要求:

写一个返回数字de power的函数.条件:该函数只能使用1个参数,并且必须使用另一个函数来返回给定数字的幂的值.

解决此练习的代码是:

def power(x):
    return lambda y: y**x
Run Code Online (Sandbox Code Playgroud)

例如,如果我们想知道功率的值:2 ^ 3,我们会调用这样的函数:power(3)(2)

这是我想知道的:

有没有办法编写一个函数,当被调用时,它具有类似的结构:function()()().换句话说,是否可以编写一个函数,在调用时需要三个或更多括号()()()?如果有可能,请您给我一个该功能的示例代码并简要说明一下?

也:

def power(x):
    def power_extra(y):
        return y

    def power_another(z):
        return z

    return power_extra and power_another
Run Code Online (Sandbox Code Playgroud)

可能?

Dav*_*son 4

你当然可以:

def power_times(k):
    """use as power_times(k)(x)(y) => k * y^x"""
    return lambda x: lambda y: k * y**x

print power_times(2)(3)(4)  # returns 2 * 4^3 = 128
Run Code Online (Sandbox Code Playgroud)

当您使用参数 2 ( power_times(2)) 调用此函数时,它会返回一个 lambda 函数,其工作原理如下lambda x: lambda y: 2 * y ** x(即,与您的原始函数类似,只是带有一个额外的“乘以 2”)。

您可以lambda根据需要将任意数量的 s 堆叠在一起:

def many_lambdas(x):
    """many_lambdas(x)(y)(z)(q) => x + y * z^q"""
    return lambda y: lambda z: lambda q: x + y * z ** q

print many_lambdas(1)(2)(3)(4) # prints 163
Run Code Online (Sandbox Code Playgroud)

def事实上,如果你完全跳过 using 并直接写下,可能会更清楚:

many_lambdas = lambda x: lambda y: lambda z: lambda q: x + y * z ** q
Run Code Online (Sandbox Code Playgroud)

或者,您可以跳过 usingeverlambda并将它们用作嵌套函数:

def many_funcs(x):
    def many_funcs_y(y):
        def many_funcs_z(z):
            def many_funcs_q(q):
                return x + y * z ** q
            return many_funcs_q
        return many_funcs_z
    return many_funcs_y

print many_funcs(1)(2)(3)(4)  # prints 163
Run Code Online (Sandbox Code Playgroud)