What is ast.If(test, body, orelse) in Python?
ast.If(test, body, orelse) is a class defined in the ast module that expresses an if statement in Python in the form of an parse() method of ast is called on a Python source code that contains if statements, the ast.If class is invoked, which expresses the if statement to a node in an ast tree data structure. The ast.If class represents the If node type in the ast tree. In the class parameter, test contains the condition of the if statement as a single node of type Compare. body is a list of nodes representing the statements inside the if block. orelse contains a list of nodes representing the additional elif and else conditions associated with the if block.
NOTE: The
elifoperator does not have a special representation in theastmodule.elifstatements are parsed as extraIfnodes.
Example
import astfrom pprint import pprintclass IfVisitor(ast.NodeVisitor):def visit_If(self, node):print('Node type: If\nFields:', node._fields)ast.NodeVisitor.generic_visit(self, node)def visit_Compare(self, node):print('Node type: Compare\nFields:', node._fields)ast.NodeVisitor.generic_visit(self, node)def visit_Name(self, node):print('Node type: Name\nFields:', node._fields)ast.NodeVisitor.generic_visit(self, node)def visit_Constant(self, node):print('Node type: Constant\nFields:', node._fields)ast.NodeVisitor.generic_visit(self, node)def visit_Pass(self, node):print('Node type: Pass\nFields:', node._fields)ast.NodeVisitor.generic_visit(self, node)visitor = IfVisitor()tree = ast.parse("""if x < 20:passelif y > 40:passelse:pass""")pprint(ast.dump(tree))visitor.visit(tree)
Explanation
- We define an
IfVisitorclass that extends from the parent classast.NodeVisitor. We override the predefinedvisit_If,visit_Compare,visit_Constant,visit_Name, andvisit_Passmethods in the parent class, which receive theIf,Compare,Constant,Name, andPassnodes, respectively. In the method, we print the type and the fields inside the node and call thegeneric_visit()method, which invokes the propagation of visit on the children nodes of the input node. - We initialize a
visitorobject of the classIfVisitor. - We write Python code that contains an
if,elif, andelseblock. We pass the code to theast.parse()method, which returns the result of the expression after evaluation, and store the result intree. - The
ast.dump()method returns a formatted string of the tree structure intree. - The
visitmethod available to thevisitorobject visits all the nodes in the tree structure.
Free Resources