Trusted answers to developer questions
Trusted Answers to Developer Questions

Related Tags

python

What is ast.If(test, body, orelse) in Python?

Abdul Monum
Abstract Syntax Tree

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 Abstract Syntax Treetree representation of source code. When the 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 elif operator does not have a special representation in the ast module. elif statements are parsed as extra If nodes.

Example

import ast
from pprint import pprint

class 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:
   pass
elif y > 40:
    pass
else:
    pass
""")
pprint(ast.dump(tree))
visitor.visit(tree)

Explanation

  • We define an IfVisitor class that extends from the parent class ast.NodeVisitor. We override the predefined visit_If, visit_Compare, visit_Constant, visit_Name, and visit_Pass methods in the parent class, which receive the If,Compare, Constant, Name, and Pass nodes, respectively. In the method, we print the type and the fields inside the node and call the generic_visit() method, which invokes the propagation of visit on the children nodes of the input node.
  • We initialize a visitor object of the class IfVisitor.
  • We write Python code that contains an if, elif, and else block. We pass the code to the ast.parse() method, which returns the result of the expression after evaluation, and store the result in tree.
  • The ast.dump() method returns a formatted string of the tree structure in tree.
  • The visit method available to the visitor object visits all the nodes in the tree structure.

RELATED TAGS

python

CONTRIBUTOR

Abdul Monum
Copyright ©2022 Educative, Inc. All rights reserved
RELATED COURSES

View all Courses

Keep Exploring