如何在函数式编程中定义一个函数? [关闭]
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
isEven
或 isOdd
(因为你在问:是evenOrOdd
? 和函数anwer True
或False
,这不是很清楚)
所以
isEven = lambda x: not x%2
isOdd = lambda x: x%2
#你只需要定义一个然后你就可以做
if isEven(x):
doSomething
if not isEven(): #then it's Odd
doSomethingElse
【讨论】:
以上是关于如何在函数式编程中定义一个函数? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章