В Python 3.12 у нас есть такие псевдонимы типов:
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
Используя этот синтаксис, я предположил, что с этого момента слово type
считается ключевым словом, но это не так:
>>> type = 2
>>>
а также:
>>> import keyword
>>> keyword.iskeyword('type')
False
Мягкие ключевые слова — это только ключевые слова в данном контексте; в других местах они по-прежнему доступны в качестве идентификаторов. Это функция, доступная парсеру PEG, который сейчас используется в CPython.
не говоря уже о том, что отмена встроенного вызова type
в одночасье сделает недействительными 30 лет и триллионы строк кода.
Парсер PEG, представленный в Python 3.9, намного более гибок, чем старый парсер, поэтому он просто способен обрабатывать подобные вещи. Попытка создать ключевое слово type
нарушила бы слишком много существующего кода, поэтому они просто... этого не сделали.
match
/case
— аналогичная история: создание этих ключевых слов привело бы к поломке слишком большого количества кода, например всего, что использует re.match
. async
раньше рассматривались аналогично, хотя, поскольку он был представлен еще в версии 3.5, им пришлось использовать хак токенайзера, чтобы заставить его работать — парсер не был достаточно мощным, чтобы справиться с проблемой самостоятельно.
Спасибо, я проверил, что keyword.issoftkeyword('type')
— это True
.
Согласно docs.python.org/3/whatsnew/… -> docs.python.org/3/reference/simple_stmts.html#type ,
type
теперь является мягким ключевым словом.