我先说一下我试过的方法,以及为什么不行:
inspect.getsource
:这玩意只能获取第一行,比如定义一个多行的 lambda 它也只能拿到第一行。并且如果 lambda 前面还有东西,它会一并拿回来,这部满足我的需求,我只想要从 lambda 关键词开始到整个 lambda 结束的定义,是不是原有格式我不在乎,只要完整且不多余就行。lambda_object.__code__.co_firstlineno
:这个同上,实际上 inspect.getsource
就是用这个值去拿的。这个值只能标识第一行所在,却不能标识开始的横轴位置以及最后的坐标。我能想到的解决方式是直接拿到 lambda 对象的字节码,从字节码反编译到 Python 源代码,但是我需要 2.7 和 3.9 、3.10 三个版本同时兼容的……我对字节码反编译不太熟悉,目前找到的都是以文件为单位的反编译,不知道有没有以对象为代码的反编译库。
我想做一个把类似于 User.filter(lambda user: user.age > 18)
这样的语句翻译到 SQL 的玩意。但是卡在了这里。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.