比如下面这个简单明了的命令式程序,它不断捕捉用户输入的内容,然后对其求和.直到用户输入一个以'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)