python 反人类函数式编程模拟while和if控制流

时间:2022-06-24 11:47:02

比如下面这个简单明了的命令式程序,它不断捕捉用户输入的内容,然后对其求和.直到用户输入一个以'0'开头的字符串,停止捕捉.

while 1:
line = input()
if line[:1]!='':
print(sum(map(int,line.split())))
else:
break

那么,能不能不用while和if这些控制流语句,用纯函数式编程一句搞定呢?能.

(lambda f:f(f))((lambda f:(lambda line:(line[:1]!='' and print(sum(map(int,line.split())))) or line[:1]=='')(input()) or f(f)))

原型如下:

#函数1:
lambda f : f(f)
#函数2:
lambda f : ... or f(f) #把函数2作为参数,调用函数1,就实现了无限循环:
(lambda f:f(f))((lambda f: ... or f(f)))

这是用递归来模拟无限循环while 1."..."的位置放上你想无限执行的表达式即可.

lambda表达式的精妙之处在于,它的定义或者执行都是表达式.比如下面2个都是表达式:

lambda x:x
(lambda x:x)(2)