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)

 

posted @ 2014-03-20 17:14  LisPythoniC  阅读(335)  评论(0编辑  收藏  举报