Hi Martin,

On 30 Apr 2022, at 21:35, Martin Mueller <martinmueller@northwestern.edu> wrote:

       for elem in elem:
            sort_and_indent(elem, level + 
1)


I'd never write the above code — i.e. using the same variable name for the for loop's iterator as it's input.  The ambiguity of what the "elem" variable refers too after this point feels too dangerous — I don't trust python's scoping rule to do what you expect.

Personally I would use,

       for child_elem in elem:
            sort_and_indent(
child_elem, level + 1)

As a sanity check on this....

The following:

elem = [1,2,3,4,5]
for e in elem:
print(e)
print(elem)


Gives the following output:

▶ ./elem.py
1
2
3
4
5
[1, 2, 3, 4, 5]

In contrast:

elem = [1,2,3,4,5]
for elem in elem:
print(elem)
print(elem)

Gives:

▶ ./elem.py
1
2
3
4
5
5

That final '5' shows Python's scoping isn't as tight as you hope.

Kind regards,

aid