On Thu, Mar 1, 2018 at 2:25 AM, Ethan Furman <et...@stoneleaf.us> wrote: > On 02/28/2018 02:43 AM, Chris Angelico wrote: >> >> On Wed, Feb 28, 2018 at 8:04 PM, Robert Vanden Eynde wrote: > > >>> 3) "C problem that an equals sign in an expression can now create a name >>> binding, rather than performing a comparison." The "=" does variable >>> assignement already, and there is no grammar problem of "=" vs "==" >>> because >>> the "with" keyword is used in the expression, therefore "with a == ..." >>> is a >>> SyntaxError whereas "where a = ..." is alright (See grammar in thektulu >>> implemention of "where"). >> >> >> Yes, but in Python, "=" does variable assignment *as a statement*. In >> C, you can do this: >> >> while (ch = getch()) >> do_something_with(ch) >> >> That's an assignment in an arbitrary condition, and that's a bug >> magnet. You cannot do that in Python. You cannot simply miss out one >> equals sign and have legal code that does what you don't want. With my >> proposed syntax, you'll be able to do this: >> >> while (getch() as ch): >> ... >> >> There's no way that you could accidentally write this when you really >> wanted to compare against the character. > > > Given the current (posted) proposal, wouldn't 'ch' evaporate before the ':' > and be unavailable in the 'while' body? >
Not my proposal. Others have suggested various forms of *expression* local name bindings, but the definition in the PEP is *statement* local. So it is indeed available. ChrisA _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/