首页 > 解决方案 > Python lambda 函数缺少 lambda 关键字但仍然有效

问题描述

我正在使用 python 库tinydb来存储数据。

根据tinydb文档,示例查询的正确语法是:

User = Query()
db.search(User.birthday.year == 1990)

为什么我们不需要:

User = Query()
db.search(lambda User: User.birthday.year == 1990)

db.search是一个只被调用一次的函数。这意味着该函数正在接收一个固定值(比较的结果)作为输入,而不是作为比较器的函数?

这个库是如何tinydb实现这种奇怪的语法的?

标签: pythonlambdatinydb

解决方案


User.birthday.year不是真正的int; 它是一个代表查询以检索int. 该对象的类型同样定义__eq__为返回的不是布尔值,而是一个函数,该函数将返回将获取的值int与 1990 进行比较的结果。


深入研究代码证实了这一点。

Query.__getattr__ 返回一个新Query对象,aUser.birthday.year也是如此Query

的定义Query.__eq__Query._generate_test确认==也建立了一个新的查询。


推荐阅读