使用Lambda作为参数(Python)

时间:2015-04-06 03:14:01

标签: python parameters lambda

所以我现在正在大学学习Python课程并遇到一些问题...这是我目前的代码:

def both(firstFunction, secondFunction: bool):

    return True if firstFunction == True and secondFunction == True else False

def is_even(number):

    return True if number % 2 == 0 else False


if __name__ == "__main__":
    check = both(is_even, lambda x : x <= 100)    
    print(check(2))

我现在得到的错误是类型错误:bool对象无法调用。我相信错误源于lambda调用,因为当我替换检查中的第二个参数时,我没有遇到任何问题。那么lambda究竟是如何工作的?我认为它只是指定一个引用一个不需要定义的函数的名称。

4 个答案:

答案 0 :(得分:1)

类似于安德鲁的答案,但也许更简洁:

def both(first, second, *args, **kwargs):
    return first(*args, **kwargs) and second(*args, **kwargs)

def is_even(number):
    return number % 2 == 0

print(both(is_even, lambda x: x <= 100, 2))

答案 1 :(得分:0)

要解决您的问题,您可以将两个功能更改为:

def both(firstFunction, secondFunction, *args, **kwargs):
    if firstFunction(*args, **kwargs) and secondFunction(*args, **kwargs):
        return True
    return False

然后使用:

调用两者
if __name__ == "__main__":
    print both(is_even, lambda x: x <= 100, 2)    
    print both(is_even, lambda x: x <= 100, 98) 
    print both(is_even, lambda x: x <= 100, 102)  

结果:

True
True
False

答案 2 :(得分:0)

首先,您的both()函数返回一个布尔值。您将both()的返回值分配给check,然后尝试将check作为一个函数调用(它不是,它是一个布尔值)。

其次,您的both()功能根本不会调用firstFunctionsecondFunction。您正在尝试将函数本身与True进行比较。 Python中唯一(内置)值等于True的值是True1(由于历史原因)。函数永远不会等于True

你可能想要的,从你的功能名称猜测,是Andrew's或Rain的答案。

或者,如果你真的希望both()返回一个函数,你可以这样做:

def both(first, second):
    def inner(*args, **kwargs):
        return bool(first(*args, **kwargs) and second(*args, **kwargs))
    return inner

然后您可以在问题中致电both()

PS:为什么要用secondFunction注释both()定义中的bool参数?

答案 3 :(得分:0)

Auscom钉了它。我当时不知道,但是我的教授让我写了一个函数,里面有一个函数。我当时不知道该怎么做,但后来我在Auscom发布后意识到了这一点。谢谢!

这是我的最终代码;

def both(first, second):
    def inner(*args):
        return bool(first(*args) and second(*args))
    return inner

然后它将被用作:

check = both(is_even,lambda x:x&lt; = 100)

检查(2)

  • 返回True