所以我现在正在大学学习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究竟是如何工作的?我认为它只是指定一个引用一个不需要定义的函数的名称。
答案 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()
功能根本不会调用firstFunction
和secondFunction
。您正在尝试将函数本身与True
进行比较。 Python中唯一(内置)值等于True
的值是True
和1
(由于历史原因)。函数永远不会等于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)