On Thu, 5 Jul 2018 at 13:43, Victor Stinner <vstin...@redhat.com> wrote:
> Hi, > > My work (*) in the "Assignment expression and coding style: the while > True case" thread helped me to understand something about the > *intended* scope. > > While technically, assignment expressions keep the same scoping rules > than assignment statements, writing "if (x := func()): ..." or "while > (x := func()): ..." shows the "intented" scope of the variable. Even > if, as explained properly in the PEP, the scope is wider (for good > reasons) as "for line in file: ..." keeps line alive after the loop > (nothing new under the sun). It's something subtle that I missed at > the first read (of the code and the PEP), the difference is not > obvious. > > x = func() > if x: > ... # obviously use x > # do we still plan to use x here? > # it's non obvious just by reading the if > > versus > > if (x := func()): > ... # obviously use x > # ":=" in the if "announces" that usually x is no longer used > # here, even if technically x is still defined > I don't know if you're trying to propose something clever here, like "if (x := func()):" would assign to 'x' only inside the "then" body of the if, but IMHO that would be a terrible idea: 1. it makes AE harder to explain. Right now you can simply say AE works just like any regular assignment, except that you can use in an expression. If you start adding exceptions to the rule, things get harder and harder to explain; 2. it would probably have a cost in terms of performance: you'd have to create another scope for every "then" body of any if statement that contains an AE. And, again, more scopes = things harder to understand. -- Gustavo J. A. M. Carneiro Gambit Research "The universe is always one step beyond logic." -- Frank Herbert
_______________________________________________ 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