如何在Python中使用Lambda函数生成操作生成器

2024-09-26 22:51:24 发布

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

def make_multiplier(scaling_factor):
    return lambda x: mul(x, scaling_factor)

def make_exponentiator(exponent):
    return lambda x: pow(x, exponent)

mul接受两个变量x,y并返回x*y。pow接受两个变量x,y并返回x^y。请注意,这两个函数非常相似。我们可以将通用性抽象为更通用的函数make_生成器,这样我们就可以编写:

make_multiplier = make_generator(mul)
make_exponentiater = make_generator(pow)

编写函数make_生成器

测试用例:

  1. make_multiplier(3)(2) = 6
  2. make_exponentiator(3)(2) = 8

我的解决方案:

def make_generator(op):
    return lambda x, y: op(x, y)
#################
# DO NOT REMOVE #
#################

def mul(x,y):
    return x*y

def pow(x,y):
    return x**y

make_multiplier = make_generator(mul)
make_exponentiator = make_generator(pow)

我得到了输出,但没有通过给定的测试用例。任何帮助都将不胜感激


Tags: lambda函数makereturndef测试用例generatorfactor
2条回答

如果您有一个像f(x, y)这样的函数,并且希望能够像g(x)(y)那样调用它,则称为currying。您可以像这样变换lambda:

# old version
return lambda x, y: op(x, y)

# curried version
return lambda x: lambda y: op(x, y)

你的函数应该接受一个操作并返回一个函数,这个函数使一个函数使用一个固定值的操作(我知道你很难理解这一点)。而您当前的实现只返回一个函数,该函数接受两个值并返回结果。更改您的实现,如下所示:

def make_generator(op):
    def make_operation(fixed_value):
        return lambda x: op(x, fixed_value)
    return make_operation

相关问题 更多 >

    热门问题