On Wed, Apr 25, 2018 at 2:28 AM, Steven D'Aprano <st...@pearwood.info> wrote: > On Tue, Apr 24, 2018 at 10:58:24AM -0400, Yury Selivanov wrote: > >> Since 'diff' and 'g' must be new names according to rule (3), those >> who read the code will notice that both were not previously bound. > > How am I supposed to notice that they've never been bound without > carefully reading through the rest of the function in detail, checking > every single expression and statement? > > And besides, you have already established that there are exceptions to > the rule "names must be new names". For example, in loops. > > What other exceptions are there? >
Yuri is talking about "new" in the syntactic sense. A new name is one which, reading lexically through the code, has not yet been assigned to in the function. (I don't know what happens with global/nonlocal declarations.) Loops have a single point at which the name is assigned to. This has a single point where the name is assigned, too, even though you'll never hit it: def f(x): if x is not x: y = 1 print(y) # UnboundLocalError While I disagree with the proposal, it is at least sane from the compiler's POV. I don't think it makes sense from a human's POV, but it's internally consistent. ChrisA _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com