- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以仅通过操作 ast.NodeVisitor.generic_visit() 对 Python 中的 ast.NodeVisitor 实例进行后序遍历?我这样做了:
class ExpParser(ast.NodeVisitor):
def generic_visit(self, node):
for x in ast.iter_child_nodes(node):
ast.NodeVisitor.generic_visit(self, x)
ast.NodeVisitor.generic_visit(self, node)
def visit_BinOp(self, node):
print type(node.op).__name__
def visit_Name(self, node):
print node.id
if __name__ == '__main__':
node = ast.parse("T1+T2*T3")
v = ExpParser()
v.visit(node)
这给了我:
T1
T2
T3
Mult
Add
我想要它给我:
T2
T3
Mult
T1
Add
我该怎么做?拜托我卡住了。
最佳答案
尝试这样的事情
import ast
class ExpParser(ast.NodeVisitor):
def generic_visit(self, node):
for field, value in reversed(list(ast.iter_fields(node))):
if isinstance(value, list):
for item in value:
if isinstance(item, ast.AST):
self.visit(item)
elif isinstance(value, ast.AST):
self.visit(value)
def visit_BinOp(self, node):
self.generic_visit(node)
print type(node.op).__name__
def visit_Name(self, node):
self.generic_visit(node)
print node.id
if __name__ == '__main__':
node = ast.parse("T1+T2*T3")
v = ExpParser()
v.visit(node)
不要忘记在每个访问方法上调用 generic_visit,或者重新实现访问方法以自动处理它。
关于python - Python 中 ast.nodevisitor 的后序遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10043205/
有没有人有一个使用 ast.NodeVisitor 在 Python 2.6 中遍历抽象语法树的简单示例?我不清楚 visit 和 generic_visit 之间的区别,我找不到任何使用 googl
我几乎是编程的初学者,目前正在尝试使用 JSoup 构建我的第一个网络抓取工具。到目前为止,我能够从我的目标网站的单个页面获取我想要的数据,但我自然希望以某种方式遍历整个网站。 JSoup 似乎为此提
是否可以仅通过操作 ast.NodeVisitor.generic_visit() 对 Python 中的 ast.NodeVisitor 实例进行后序遍历?我这样做了: class ExpParse
在不得不切换到 Firebase Admin 4.0.0 SDK 之后,我在服务器上得到了这个。任何人都知道我可以切换回旧的 server-sdk 依赖项的任何方式,或者解决此异常的方法?同时我已经向
想象一下以下类型的字符串: if ((a1 and b) or (a2 and c)) or (c and d) or (e and f) 现在,我想得到括号中的表达式,所以我用以下语法编写了一个 P
NodeVisitor 以深度优先的方式遍历 AST,并且在进入时仅访问每个节点一次。因此,用它做一些严肃的事情是有问题的。是否可以更改其默认行为? 最佳答案 也许有人会对一些草拟的例子感兴趣,如何做
我是一名优秀的程序员,十分优秀!