python 反人类函数式编程模拟while和if控制流
比如下面这个简单明了的命令式程序,它不断捕捉用户输入的内容,然后对其求和.直到用户输入一个以'0'开头的字符串,停止捕捉.
while 1: line = input() if line[:1]!='0': print(sum(map(int,line.split()))) else: break
那么,能不能不用while和if这些控制流语句,用纯函数式编程一句搞定呢?能.
(lambda f:f(f))((lambda f:(lambda line:(line[:1]!='0' and print(sum(map(int,line.split())))) or line[:1]=='0')(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)