habrahabr

Что мне не нравится в Python

  • понедельник, 18 марта 2019 г. в 00:18:22
https://habr.com/ru/post/443496/
  • C
  • Python


Привет, Хабр!
Я подумал о том чего мне не хватает в Python, и что мне не нравится.
Здесь и далее под Python я имею ввиду эталонную реализацию Python — Cpython.
Дисклеймер: это мое субъективное мнение, оно может не совпадать с Вашим.
Я с удовольствием программирую на Python, но у любой технологии (языка программирования в частности) есть свои недостатки, хотя возможно Вы не согласитесь со мной.

1. Отсутствие const


Это наверное один из самых первых пунктов, который приходит в голову. Константы это реально удобно, они могут существенно уменьшить число ошибок в коде. В Питоне нет поддержки констант.
Конечно, Вы можете называть переменные большими буквами и считать их константами (не изменять их).
Но проблема в том, что это не прописано в PEP8. Т.е если Вы присвоите значение переменной CONSTANT, Ваша IDE никогда не скажет Вам, что Вы делаете что-то не так.

2. Низкая производительность


Здесь я имею в виду производительность именно кода на Питоне. Если питоновский скрипт использует для тяжелых вычислений библиотеку на Си, то все становится гораздо быстрее.
Вся стандартная библиотека по максимуму написана на Питоне, не на Си.
С одной стороны это увеличивает ее портируемость (на альтернативные реализации вроде PyPy).
С другой стороны это существенно снижает скорость. Например, стандартный модуль json имеет простое и понятное апи, но с другой стороны значительно медленнее сторонней реализации ujson (написан на Си).

3. Отсутствие switch


Когда я спрашивал знакомых питонистов, что им не хватает в языке многие сказали, что конструкции switch как в Си подобных языках.

как мог бы выглядеть switch в Python
switch a:
	case 1:
		b=1
	case 2:
		b=3
	default:
		b=5

Пример, понятное дело выдуманный, но согласитесь, что это приятнее чем
if/elif/else, особенно когда условий, которые нужно проверить множество.

4. Обратная совместимость не гарантируется


Основная боль это, конечно, отличия между 2 и 3 версией.
Конечно, можно без особых проблем переписать скрипт со 2 версии на 3, благо есть официальное руководство.
Но согласитесь, неприятно, что для работы всех программ на Питоне нужно иметь 2 интерпретатора: 2 версии и 3. По-прежнему число проектов на 2 версии велико.
Кстати, в 4 версии Python обратную совместимость вроде как опять сломают (PEP401)
кратко о PEP 401
Все очень просто.
Оператор != заменяют на <>
Вместо того чтобы писать 1!=1 мы будем писать 1<>1
Опробовать новый оператор можно уже сейчас:
from __future__ import barry_as_FLUFL
print(barry_as_FLUFL) #_Feature((3, 1, 0, 'alpha', 2), (4, 0, 0, 'alpha', 0), 262144)
1!=1 #выбросит SyntaxError


UPD: Умные люди в комментариях сказали, что это первоапрельская шутка от разработчиков. Ничего не могу сказать по этому поводу, в PEP ничего не было сказано про шутку.
Но несмотря на это, в Python все равно множество обновлений привели к нарушению обратной совместимости, например версия 3.7

5. Спорные пункты


К ним можно отнести GIL и синтаксис Питона.
Кому-то не нравится синтаксис тем, что он не похож на сишный.
Однако, как правило, чем больше кодишь на питоне, тем больше нравится его специфика)
По поводу GIL многие скажут, что это однозначный минус, т.к ограничивается параллельность вычислений.
Могу сказать, что основные причины использования GIL это:
Однопоточные сценарии выполняются значительно быстрее, чем при использовании других подходов обеспечения потокобезопасности;
Простая интеграция библиотек на C, которые зачастую тоже не потокобезопасны;
Простота реализации.
Кстати, есть реализации Python без GIL, например IronPython, Jython.
В Cython можно выключать GIL.
На этом все.
А что Вы хотели бы видеть в Питоне и чего Вам не хватает?
Пишите Ваше мнение в комментариях.