printing infinite recursion
I learned recently that you can use a Python built in to elegantly print recursive data structures.
from reprlib import recursive_repr
class Node:
def __init__(self, value, next=None):
self.value = value
self.next = next
def __repr__(self):
return f"Node({self.value}, {self.next})"
class InfNode:
def __init__(self, value, next=None):
self.value = value
self.next = next
@recursive_repr()
def __repr__(self):
return f"Node({self.value}, {self.next})"
if __name__ == "__main__":
root = InfNode(1)
root.next = InfNode(2, root)
print(root)
root = Node(1)
root.next = Node(2, root)
print(root)
Traceback (most recent call last):
File "/Users/inf_rec.py", line 28, in <module>
print(root)
File "/Users/inf_rec.py", line 9, in __repr__
return f"Node({self.value}, {self.next})"
File "/Users/inf_rec.py", line 9, in __repr__
return f"Node({self.value}, {self.next})"
File "/Users/inf_rec.py", line 9, in __repr__
return f"Node({self.value}, {self.next})"
[Previous line repeated 330 more times]
RecursionError: maximum recursion depth exceeded while getting the str of an object
With the @recursive_repr decorator, the code detects that recursion happens and formats it nicely.
Node(1, Node(2, ...))