使用Lambda作为参数(Python)
所以我现在在大学上Python课,遇到了一点问题。。。这是我当前的代码:使用Lambda作为参数(Python),python,parameters,lambda,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__ ==
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))
def两者(第一个函数,第二个函数:bool):
如果firstFunction==True,则返回True;如果secondFunction==True,则返回False
def为偶数(数字):
如果数字%2==0,则返回True,否则返回False
如果名称=“\uuuuu main\uuuuuuuu”:
check=both(是偶数,lambda x:x要解决您的问题,您可以将这两个函数更改为:
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)
与安德鲁的答案相似,但可能更简洁:
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))
def两者(第一、第二、*args、**kwargs):
返回第一个(*args,**kwargs)和第二个(*args,**kwargs)
def为偶数(数字):
返回编号%2==0
print(both)(是偶数,lambda x:x首先,您的both()
函数返回一个布尔值。您将both()
的返回值赋给check
,然后尝试将check
作为函数调用(它不是布尔值)
其次,您的both()
函数根本不调用firstFunction
和secondFunction
。您试图将函数本身与True
进行比较。Python中唯一与True
相等的(内置)值是True
和1
(出于历史原因).函数永远不等于True
从函数名猜测,您可能想要的是Andrew或Rain的答案
或者,如果您确实希望both()
返回函数,您可以执行以下操作:
def both(first, second):
def inner(*args, **kwargs):
return bool(first(*args, **kwargs) and second(*args, **kwargs))
return inner
然后你可以调用both()
就像你的问题一样
PS:为什么在tware()中注释了secondFunction
参数
定义与bool
?Auscom把它搞定了。我当时不知道,但我的教授让我写一个里面有函数的函数。我当时不知道怎么做,但在Auscom发布后我意识到了。谢谢
这是我最后的密码
def both(first, second):
def inner(*args):
return bool(first(*args) and second(*args))
return inner
然后它将被用作:
检查=两者(lambda x:x,你能告诉我们错误的回溯吗?为什么在两个的定义行中都有secondFunction:bool
?并且你意识到你没有在两个中调用firstFunction
或secondFunction
,对吗?你正在测试函数本身是否是Tru>e
,我相信它们永远都是。您提供的代码引起的错误是一个语法错误
——对于两者的错误定义行
——而不是类型错误
。这个问题与lambda
无关,因此请编辑标题。
def both(first, second):
def inner(*args):
return bool(first(*args) and second(*args))
return inner