Earlier quoted context omitted.
They're not ambiguous, assignments are declarations unless the variable was pre-declared (via global or nonlocal). Assignment was specifically made a statement to avoid the confusion / typo risks of `=` v `==`.
They are not ambiguous if you have the whole file in your head. This is why there are keywords like "global" & "nonlocal".
They're not ambiguous period, python's `=` always performs a local declaration unless overridden via the keywords you mentioned.
> This is why there are keywords like "global" & "nonlocal".
It's the exact opposite of your statement: `global` and `nonlocal` indicate non-local bindings, because by default all bindings are local and you do not need to have "the whole file in your head".