In Python 3.12 we have type aliases like this:
Python 3.12.4+ (heads/3.12:99bc8589f0, Jul 27 2024, 11:20:07) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> type S = str
>>> S
S
By this syntax I assumed that, from now, the type
word is considered a keyword, but it's not:
>>> type = 2
>>>
and also:
>>> import keyword
>>> keyword.iskeyword('type')
False
The PEG parser introduced in Python 3.9 is a lot more flexible than the old parser, so it's just capable of handling this kind of thing. Trying to make type
a keyword would have broken too much existing code, so they just... didn't.
match
/case
is a similar story - making those keywords would have broken way too much code, such as everything that uses re.match
. async
used to be treated similarly, although since it was introduced back in 3.5, they had to use a tokenizer hack to get it to work - the parser wasn't powerful enough to handle the problem on its own.