如何在函数式编程中定义一个函数? [关闭]

Posted

技术标签:

【中文标题】如何在函数式编程中定义一个函数? [关闭]【英文标题】:How to define a function in functional programming? [closed] 【发布时间】:2021-12-08 16:21:50 【问题描述】:

我正在尝试学习函数式编程,并且我正在使用 Python 进行学习。我正在尝试做的一个练习是创建一个函数,如果数字是偶数则返回 true。

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>

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

【问题讨论】:

return x % 2 == 0,如果你真的想使用 lambda,你必须调用它:return (lambda x: x % 2 == 0)(x) 但没有必要使用它 只是为了扩展@Matiiss 所写的内容。您创建了一个函数evenOrOdd,它返回一个函数,告诉您初始值是偶数还是奇数。 我不确定 lambda 应该实现什么。函数式编程确实使用返回其他函数的函数,但这里没有明显的指向这种模式。 【参考方案1】:

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

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

【讨论】:

lambda 为自己的作用域定义了一个全新的x @Matiss 是的,这就是我所说的重新定义的意思,但你的解释更正确【参考方案2】:

如果要创建显式函数

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

使用 lambda 语句:

evenOrOdd2 = lambda x: x%2 ==0

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

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

所以

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

#你只需要定义一个然后你就可以做

if isEven(x):
    doSomething

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

【讨论】:

以上是关于如何在函数式编程中定义一个函数? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

2.1python高级编程1-函数式编程和装饰器

Javascript 中的函数式编程

Kotlin中函数式编程的详解

前端必学——函数式编程

JS中函数式编程基本原理简介

浅析函数式编程与前端