热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

lambdex让Python支持更复杂的lambda匿名函数表达式

先放出Github地址:https://github.com/hsfzxjy/lambdex

先放出 Github 地址: https://github.com/hsfzxjy/lambdex



大概一个月前有一个奇思妙想:说到匿名函数,Python 虽有 lambda 表达式,但与其他语言如 Rust 的闭包或是 JS 的箭头函数相比还是过于简单了。其函数体仅支持单一表达式,不支持更复杂的语句。我想对此做一些扩展,使 Python 支持更复杂的匿名函数。于是便有了 lambdex 。

目前 lambdex 支持写出类似如下的代码(以递归计算 Fibonacci 数列为例):



1
2
3
4
5
6
7
8
9
10
from lambdex import def_

def_(lambda n: [

    if_[n <= 0] [

        raise_[ValueError(f'{n} should be positive')]

    ],

    if_[n <= 2] [

        return_[1]

    ],

    return_[callee_(n - 1) + callee_(n - 2)]  # Recursion

])(10)  # 55

lambdex 以一种非侵入式的方式在运行时转写 AST 并编译成字节码,并将字节码缓存以供后续使用,因此只有首次编译的 overhead 。同时,lambdex 还提供了一个内置的 Formatter,用于格式化含有匿名函数的代码。

也许你会说“这个库没有工程应用价值” “这个库不 Pythonic” “这个语法不够函数式”等等。本人认同这些观点。

但作为一个语法扩展的实验性项目,lambdex 应该算是同类中较为完备的。lambdex 本身有很大的可玩性,并为实现其他语言中的一些函数式范式提供了可能。

lambdex 确实不 Pythonic,但对于不看重 Pythonic 的用户,这是个好的尝试。同时 lambdex 对标的是如 Rust 或 JS 中的匿名函数,期望在匿名函数中提供更完备的 imperative programming 体验,并无意向 Haskell 等看齐。

最后个人认为构建这个库本身就是一件很有趣的事情。在这个过程中本人接触到了 CPython 底层的许多细节,同时也在不断思考如何更干净地实现各种逻辑。这是非常有意义的一件事。

欢迎各位试用并提 Issues !

很酷!我详细看看。另外一提,在类似于循环中使用 def_(lambda x: ...) 会不会反复创建匿名函数对象?


   



推荐阅读
author-avatar
爱rain宝520
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有