pg.traverse¶
Accessible via pg.traverse
, pg.symbolic.traverse
.
- traverse(x, preorder_visitor_fn=None, postorder_visitor_fn=None, root_path=None, parent=None)[source]¶
Traverse a (maybe) symbolic value using visitor functions.
Example:
@pg.members([ ('x', pg.typing.Int()) ]) class A(pg.Object): pass v = [{'a': A(1)}, A(2)] integers = [] def track_integers(k, v, p): if isinstance(v, int): integers.append((k, v)) return pg.TraverseAction.ENTER pg.traverse(v, track_integers) assert integers == [('[0].a.x', 1), ('[1].x', 2)]
- Return type:
- Parameters:
x – Maybe symbolic value.
preorder_visitor_fn – preorder visitor function. Function signature is (path, value, parent) -> should_continue.
postorder_visitor_fn – postorder visitor function. Function signature is (path, value, parent) -> should_continue.
root_path – KeyPath of root value.
parent – Optional parent of the root node.
- Returns:
- True if both preorder_visitor_fn and postorder_visitor_fn return
either TraverseAction.ENTER or TraverseAction.CONTINUE for all nodes. Otherwise False.