[Python-ideas] Make keywords KEYwords only in places they would have syntactical meaning

Chris Angelico rosuav at gmail.com
Fri May 18 14:34:24 EDT 2018


On Sat, May 19, 2018 at 2:56 AM, MRAB <python at 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


More information about the Python-ideas mailing list