Обсуждение дополняет статью, раскрывая исторические причины поведения констант в Python, их влияние на производственные среды и противоречия между удобством для новичков и сложностью для масштабирования.
-
True, False и None стали лексическими токенами в Python 3, чтобы предотвратить переопределение, которое было возможно в Python 2, где можно было выполнить True, False = False, True.
-
__debug__ — уникальный случай в Python: код в блоках if __debug__: полностью удаляется компилятором при PYTHONOPTIMIZE=1, и его нельзя переопределить, потому что это нарушит оптимизацию на этапе компиляции.
-
Python 3.15 добавит новую константу TYPE_CHECKING, которая будет вести себя как Ellipsis и NotImplemented — как лексический токен, недоступный для переопределения, но доступный как атрибут builtins.
-
Экосистема data science в Python — отдельный мир: пользователи не интересуются внутренними механизмами языка, а ценят библиотеки и скорость прототипирования, что объясняет низкие стандарты качества кода в Jupyter-ноутбуках.
-
Спор: Некоторые считают Python плохим для новичков из-за significant whitespace, GIL, duck typing и проблем с пакетами, другие утверждают, что его простота в начале делает его идеальным для первого языка, особенно для детей и не-инженеров.
-
Спор: Одни критикуют Python за слабую типизацию и нестабильность при масштабировании, другие отмечают, что его гибкость позволяет быстро писать ETL-скрипты, веб-приложения на Django и sysadmin-инструменты, где другие языки не конкурируют.
-
Совет: uv и PEP 723 упрощают создание и развертывание скриптов в Python, позволяя встраивать зависимости прямо в файл, что решает проблему управления версиями и делает Python лучше для sysadmin-задач.
-
Совет: Для production-развертывания Jupyter-ноутбуков рекомендуется абстрагировать вычисления в граф-структуры, чтобы избежать проблем с выполнением ячеек в неправильном порядке и зависимостями от сессии.
-
Использование isinstance(True, int) == True — следствие исторического решения, когда bool был реализован как подтип int, что до сих пор сохраняется для обратной совместимости.
-
Python-экосистема выигрывает за счет богатства библиотек: замена на другие языки требует переписывания десятков зависимостей, что нереально для научных и аналитических задач.
-
Python стал доминирующим в ML/DS не из-за языковых достоинств, а потому что он стал первым языком, в котором появились нужные библиотеки — это сеть эффект, а не техническое превосходство.
-
Сложности с пакетированием (например, невозможность import numpy==1.5.4) и отсутствие надежного управления зависимостями — ключевая боль для разработчиков, несмотря на наличие инструментов вроде pip, conda, uv.
-
JS и Python оба имеют странные особенности, но их популярность объясняется тем, что они стали стандартом — их «странные» черты становятся заметны только из-за широкого использования и детального анализа.
-
Невозможность переопределить True/False в Python 3 — это не ошибка, а осознанное решение после того, как в Python 2 это приводило к скрытым багам в коде, особенно в научных и аналитических приложениях.
-
Совет: Для тех, кто хочет избежать проблем Python, стоит рассмотреть Julia для научных вычислений — она предлагает схожий синтаксис, но с компиляцией, статической типизацией и отсутствием GIL, хотя экосистема пока уступает.