函数式编程中如何定义函数?Python偶数判断函数实现问题求助
问题原因
- 现有代码的
evenOrOdd函数接收参数后没有做计算,直接返回了未执行的lambda函数对象,所以打印结果是函数内存地址,不是布尔值。 - 外层函数接收的参数
x和lambda内部定义的参数x分属不同作用域,外层传入的数值完全没有被使用,属于冗余设计。
符合函数式编程规范的实现
函数式编程要求使用无副作用、输入确定则输出确定的纯函数,Python中以下两种实现都符合规范:
实现1:直接使用lambda定义(利用函数是一等公民的特性)
lambda本身就是匿名函数,可以直接赋值给变量作为函数使用,没有多余嵌套,简洁符合函数式设计思想:
evenOrOdd = lambda x: x % 2 == 0 print(evenOrOdd(1)) print(evenOrOdd(2)) print(evenOrOdd(3)) print(evenOrOdd(4))
运行输出:
False True False True
实现2:def定义纯函数
如果需要使用具名函数,直接返回判断表达式即可,也是标准的纯函数写法:
def evenOrOdd(x): return x % 2 == 0
调用方式和运行结果和第一种实现完全一致。
如果你非要保留原有嵌套lambda的结构,需要在获取返回的lambda后主动传入参数执行,例如
print(evenOrOdd(None)(2)),但这种写法冗余无意义,外层参数完全无效,不推荐使用。
内容的提问来源于stack exchange,提问作者Jrblack
相关产品推荐
相关产品推荐

