将比较运算符映射到函数调用
我正在用Python创建一个用于表单验证的领域特定语言(DSL),其中一个要求是能够指定某个字段的值应该大于或小于一个常量值或另一个字段的值。因此,我想把像<
、>
、<=
和>=
这样的操作符,简单地映射到operator
模块中对应的函数,这样在验证字段时就可以直接调用它们。
我意识到我可以创建一个字典,把操作符和函数对应起来,但有没有更好的方法呢?有没有办法访问Python内置的映射呢?
2 个回答
3
Python内部把"<"这个符号映射到__lt__
(还有其他类似的符号)这个方法,但在标准库里并没有公开这个映射。其实,Python内部有很多东西并没有作为工具包提供给我们使用。我也不太确定一般来说这种映射是怎么创建的。那__getitem__
又是映射到什么呢?
你只需要自己创建一个映射就可以了,这应该不难。
5
据我所知,Python里没有一个内置的字典可以把字符串 ">"
映射到函数 operator.lt
等等。
正如其他人提到的,Python解释器本身并不使用这样的字典,因为在解析和执行Python代码的过程中,它会先把字符序列 ">" 转换成一个代表这个操作符的标记,然后再把这个标记转换成字节码。执行这个字节码的结果会直接调用 __lt__
方法,而不是通过 operator.lt
函数来调用。