当前位置:  开发笔记 > 编程语言 > 正文

优雅的方式来测试python ASTs的相等性(不是引用或对象标识)

如何解决《优雅的方式来测试pythonASTs的相等性(不是引用或对象标识)》经验,为你挑选了0个好方法。

不知道这里的术语,但是这将是区别eq?equal?的差额,方案,或者==strncmp与C字符串; 在每种情况下,第一个将返回false为两个不同的字符串,实际上具有相同的内容,第二个将返回true.

对于Python的AST,我正在寻找后一种操作.

现在,我这样做:

import ast
def AST_eq(a, b):
    return ast.dump(a) == ast.dump(b)

这看起来很有效,但感觉就像是等待发生的灾难.谁知道更好的方法?

编辑:不幸的是,当我去比较两个AST时__dict__,这个比较默认使用单个元素的__eq__方法.AST被实现为其他AST的树,并且它们__eq__显然检查参考标识.因此,无论是直接==还是托马斯链接的解决方案.(除此之外,我也不想将每个AST节点类型子类化以插入此自定义__eq__.)

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有