[...] The two options on the table are:
1) Allow references to any value that has been provided in any way
2) Allow references only to parameters to the left
Option 2 is a simple SyntaxError on compilation (you won't even get as
far as the def statement). Option 1 allows everything all up to the
point where you call it, but then might raise UnboundLocalError if you
refer to something that wasn't passed.
Note that if you were to choose the SyntaxError option, you'd be breaking new ground. Everywhere else in Python, undefined names are runtime errors (NameError or UnboundLocalError).
--