zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    Diameter 消息格式解析
    我们活成了不想的样子
    《活着》片段
    我的庚子年
    <<甄嬛传>>后感
    对于根目录磁盘满的了问题
    phpstorm注册账号
    mac安装nginx
    samba文件共享及账户映射
    我们的读书会
  • 原文地址:https://www.cnblogs.com/xiangnan/p/3614180.html
Copyright © 2011-2022 走看看