criteria.py 文件源码

python
阅读 23 收藏 0 点赞 0 评论 0

项目:beval 作者: hyw208 项目源码 文件源码
def visit_Compare(self, node):
        if len(node.ops) not in (1, 2,):
            raise SyntaxError("ast.Compare with more than 2 ops: %s is not supported" % node)

        (_, left), (_, ops), (_, comps) = ast.iter_fields(node)
        self.visit(left)
        left = self.data.pop()

        comparators = list()
        for comparator in comps:
            self.visit(comparator)
            comparators.append(self.data.pop())

        if len(ops) == 1:
            right = comparators[0]
            cls = criteria_class.lookup(ast_op_to_criteria.lookup(type(ops[0])))
            criteria = cls(left, *right) if type(right) in (list, tuple,) else cls(left, right)
            self.data.append(criteria)

        else:
            lower = left
            lower_op = ast_op_to_operator.lookup(type(ops[0]))
            one = comparators[0]
            upper_op = ast_op_to_operator.lookup(type(ops[1]))
            upper = comparators[1]
            criteria = criteria_class.instance(Const.Between, lower, one, upper, lower_op, upper_op)
            self.data.append(criteria)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号