В Python есть замечательная возможность присваивать свои имена при импорте (import foo.bar.baz as fbb). Так можно легко избежать конфликтов имён при импорте и повысить читаемость кода, если требуется. Но этой же возможностью можно легко превратить хороший код в абсолютно нечитаемый. В последнее время я несколько раз встречался с этим: попадались мне в основном странные сокращения и непонятные имена для алиасов.
Продемонстрирую проблему на примере сокращений. Хороший пример придумать с ними проще:
from facebook import utils as fbu
from twitter import units as tu
Отлично, конфликта имён избежали. Но что такое tu? Если встретить такое имя в коде, придётся совершать дополнительные действия, чтобы понять, что автор имел в виду. Гораздо лучше, если будет что‑то вроде такого:
from facebook import utils as facebook_utils
from twitter import units as twitter_utils
Уж теперь‑то никаких вопросов в коде не возникнет. Конечно, имена немного длиннее, но кто сейчас экономит байты? Я бы использовал эту формулу импорта в подобном случае даже если импортируется одна из библиотек с утилитами: читаемость кода будет выше.
Оказалось, что обосновать важность читаемости кода не так‑то просто. Обычно на претензии к сокращениям отвечают, что можно в импорте посмотреть, что это значит и откуда «прилетело». Безусловно, можно. В IDE вообще никаких проблем с этим нет: ткнул в нужное место, перешёл к определению, почитал, вернулся обратно.
Но большая часть чтений кода происходит в PR на GitHub или в подобной системе. Читается маленький дифф, где может просто не быть нужного импорта. Приходится «раскручивать» файл, чтобы добраться до нужной строчки. Никакой помощи в навигации по коду тут нет. Остаётся только экономить время читающего, используя осмысленные переименования.