On Aug 1, 2019, at 13:38, Daniel Okey-Okoro <danielokeyok...@gmail.com> wrote: > > > > not a strong enough justification for breaking any code that uses "no" in > > any other way. > > This is a very crucial point I didn't consider. > > ------------------------------------------------------------ > > What if we could lexically limit it to `if no {{everything else in the if > block}}`? > > I think that would sufficiently protect us from unintentionally breaking > people's code.
There are some cases where a “contextual keyword” that’s usable as an identifier outside of a specific syntactic construct could avoid ambiguity, but this isn’t one of them, because the thing immediately after the `if` in an if statement can be–and often is—an identifier. For example: total = len(votes) yes, no, other = (len(part) for part in partition_votes(votes)) if no >= total//2: # etc. I even found an actual example of the equivalent in some C++ code I had on my hard drive: if (no == ask(…)) { // … } In Python, that would be: if no == ask(…): Also, even if that weren’t a problem, this would be very misleading syntax. If I can write `if no sales:` I’d expect to be able to write `if isopen and no sales:` or `0 if no sales else mean(sales)` or `skip = no sales` or any of the other things I can do with `not` and other operators rather than special syntax. Also, I could still write `if no sales and isopen:`, but it would do the wrong thing if `no` is special syntax that reverses the sense of the `if` rather than a normal operator that binds more tightly than `and`. -- https://mail.python.org/mailman/listinfo/python-list