使用Lambda作为参数(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__ ==

所以我现在在大学上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))
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