Also see assignment expressions recently adopted in python 3.8: https://www.python.org/dev/peps/pep-0572/
Assignment was specifically made a statement to avoid the confusion / typo risks of `=` v `==`.
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".