如何在函数式编程中定义函数?

How to define a function in functional programming?

我正在尝试学习函数式编程,我正在学习 Python。我正在尝试做的一个练习是制作一个函数,如果数字是偶数,则 returns 为真。

def evenOrOdd(x):
return lambda x: x%2 == 0

print(evenOrOdd(1))
print(evenOrOdd(2))
print(evenOrOdd(3))
print(evenOrOdd(4))
<function evenOrOdd.<locals>.<lambda> at 0x7f7a9a145670>
<function evenOrOdd.<locals>.<lambda> at 0x7f7a9a145670>
<function evenOrOdd.<locals>.<lambda> at 0x7f7a9a145670>
<function evenOrOdd.<locals>.<lambda> at 0x7f7a9a145670>

这就是我目前所拥有的,但如您所见,它没有返回布尔值。

如果要创建显式函数

def evenOrOdd1(x):
   return x%2 ==0

使用 lambda 语句:

evenOrOdd2 = lambda x: x%2 ==0

然后你可以打电话给 打印(偶数或奇数 1(1)) 打印(evenOrOdd2(1))

但在这两种情况下名称都很清楚,我建议使用 as names isEvenisOdd(因为你问的是:是evenOrOdd吗?函数回答TrueFalse,不是很清楚)

所以

isEven = lambda x: not x%2
isOdd  = lambda x: x%2 

#你只需要定义一个就可以了

if isEven(x):
    doSomething

if not isEven(): #then it's Odd
    doSomethingElse

你要么这样做:(声明一个正常的函数)

def evenOrOdd(x):
    return x%2 == 0

或者这样:(使用 lambda 声明一个函数)

evenOrOdd = lambda x: x%2 == 0

这个

def evenOrOdd(x):
    return lambda x: x%2 == 0

表示您从函数 evenOrOdd 返回一个 lambda 函数。在这种情况下,变量 x 没有实际区别,因为 lambda 重新定义了它。你可以这样称呼它:

evenOrOdd(999)(2) #999 could be anything