[Python-Dev] assignment expressions: an alternative proposal (original) (raw)
Chris Angelico rosuav at gmail.com
Tue Apr 24 12:35:57 EDT 2018
- Previous message (by thread): [Python-Dev] assignment expressions: an alternative proposal
- Next message (by thread): [Python-Dev] assignment expressions: an alternative proposal
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Wed, Apr 25, 2018 at 2:28 AM, Steven D'Aprano <steve at 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
- Previous message (by thread): [Python-Dev] assignment expressions: an alternative proposal
- Next message (by thread): [Python-Dev] assignment expressions: an alternative proposal
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]