我正在研究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)
可能?
你当然可以:
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)