Почему две из 6 встроенных констант назначаются?

В документации по встроенным константам (за исключением констант site ) указано, что:

Примечание. Имена None , False , True и __debug__ не могут быть переназначены (присваивание им, даже как имя атрибута, повышает значение SyntaxError ), поэтому их можно считать «истинными» константами.

Если я не ошибаюсь, True и False стали «истинными» участниками в Python 3. (Как также описано в дубликате.)

Вопрос в том, почему не два других (« Ellipsis , NotImplemented ) «истинные» участники? Есть ли прецедент для повторного назначения этих ( numpy с Ellipsis возможно?), Который освободил их от этого ограничения?

Обостряя мое замешательство, в документации для стандартных типов библиотек, типы NotImplemented и NotImplemented поведенчески идентичны типу None . А именно:

  • Они являются одноточечными
  • Они не поддерживают специальные операции.

Этот вопрос не связан с предлагаемым дубликатом: почему True и False были изменены на ключевые слова в Python 3 . Он спрашивает что-то совершенно другое, а именно, почему NotImplemented и NotImplemented не являются «истинными» константами, а не почему True и False где они меняются.

One Solution collect form web for “Почему две из 6 встроенных констант назначаются?”

Вы можете назначить любой действительный идентификатор, который не является ключевым словом. Что особенного в True , False , None является то, что они являются как ключевыми словами, так и идентификаторами. Вы можете прочитать о причинах этого в этом вопросе:

Почему True и False изменились на ключевые слова в Python 3

Встроенные, такие как NotImplemented или NotImplemented , не являются особыми случаями, и не являются int , list , type и т. Д. Присвоение NotImplemented не изменяет встроенную константу. Вместо этого вы привязываете имя Ellipsis к другому значению в текущей области. Исходный Ellipsis не изменяется.

Назначение ключевому слову – SyntaxError.

Вы можете увидеть список ключевых слов, импортировав модуль keywords .

 >>> import keyword >>> keyword.kwlist ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'] 

Есть много встроенных идентификаторов, которых нет в этом списке, и вы можете назначить новые значения для int , Ellipsis и т. Д.

... это особый случай, поскольку он не является действительным именем идентификатора в первую очередь, поэтому его невозможно было бы присвоить.

Python сохраняет список зарезервированных ключевых слов довольно короткий, по сравнению со многими другими языками. Одна из причин, вероятно, заключается в том, чтобы сохранить обратную совместимость с кодом, который по какой-то причине использовал идентификаторы, такие как Ellipsis до того, как он стал частью языка.

  • Почему эквивалентный код Python настолько медленнее
  • python3 удаляет пространство из печати
  • in и index в списке
  • Переименование Python - получение значения перечисления при преобразовании строк
  • sqlite3 не сможет импортировать в python 3
  • Тестирование, если несколько объектов находятся в списке, используя один оператор «in» (Python)
  • Преобразование CSV в JSON (в определенном формате) с использованием Python
  • Как переместить и переименовать документы, размещенные в нескольких вложенных папках, в новую отдельную папку с помощью python?
  • Замена Python 3 для PyFile_AsFile
  • Почему Python 3 изменился на exec, нарушив этот код?
  • Как правильно переопределить __setattr__ и __getattribute__ в классах нового стиля в Python?
  • Python - лучший язык программирования в мире.