On Sat, May 19, 2018 at 2:56 AM, MRAB <pyt...@mrabarnett.plus.com> wrote: > On 2018-05-18 12:22, Ken Hilton wrote: >> >> Hi all, >> >> Yes, this is another idea for avoiding breaking existing code when >> introducing new keywords. I'm not sure if this is too similar to Guido's >> previous "allow keywords in certain places" idea, but here goes: >> >> Only treat keywords as having any special meaning when they are in places >> with syntactical significance. >> So, currently, let's say someone set the variable "and_" to some value. >> The following lines are both SyntaxErrors: >> >> True and_ False >> obj.and = value >> >> And the following are both correct: >> >> True and False >> obj.and_ = value >> >> My idea is to only treat keywords as having special meaning when they're >> in the right place. So the following would all be legal: >> >> >>> from operator import and >> >>> var = and(True, False) >> >>> var >> False >> >>> var = True and False >> >>> var >> False >> >>> def except(exc, def): >> ... try: >> ... return def() >> ... except exc as e: >> ... return e >> ... >> >>> except(ZeroDivisionError, lambda: 1/0) >> ZeroDivisionError('division by zero',) >> >>> except(ZeroDivisionError, lambda: 0/1) >> 0.0 >> >>> import asyncio as await #this is already currently legal, but >> will not be in the __future__ >> >>> async def async(def): >> ... return await await.get_event_loop().run_in_executor(None, >> def) >> ... >> >>> >> >> And so on. >> >> What are your thoughts? >> > This would be legal, but what would happen? > > def yield(x): > print('YIELD') > > def foo(): > yield('FOO') > > f = foo()
"yield" would have to be a keyword in any context where an expression is valid. Which, in turn, makes it utterly useless as a function name, or any other identifier. 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/