Три «секретных оружия» Python
В этой статье мы поговорим об инструментах, которые упростят работу с кодом. Речь идёт об автозаполнении с ИИ, быстром поиске ошибок, статическом и динамическом анализе кода.
Когда опыт разработчика растёт, число используемых инструментов уменьшается, ведь многие из них вы со временем перерастаете. Но есть инструменты, которые вы будете продолжать использовать. О них и поговорим.
«Секретное оружие» № 1: Kite
Большинство современных редакторов кода имеют функцию автодополнения, которая выглядит приблизительно так:
Как правило, для определения имён и типов возможных параметров и функций встроенный инструмент использует документацию. А как вам вариант, когда редактор получает доступ к коду из всех публичных GitHub-репозиториев, начиная подтягивать не только имена, но и полноценные строки кода? Как раз это и реализовано в таком инструменте, как Kite. Есть как минимум три причины обратить на него внимание.
Причина 1: умные подсказки
Плагин Kite просматривает ваш код, переменные и наиболее часто применяемые имена параметров в комплексе. В результате, собрав все данные, он рекомендует что-то типа этого:
Также работу плагина вы можете посмотреть в этом коротком демонстрационном видео. И, если хотите, можете поиграться в песочнице.
Причина 2: Copilot для документации
Говорят, что не нужно беспокоить более опытного коллегу или тратить время на поиск ответов в Stack Overflow прежде, чем вы изучите документацию. А упростить поиск поможет Kite Copilot. Он функционирует параллельно с IDE, показывая информацию о любых функциях либо объектах, на которые наведён курсор.
Причина 3: работа локально и приватно
Плагин создан для локальной работы, поэтому вы получите быстрые советы, работа будет проходить в автономном режиме, а ваш код не будет отправлен в облако. И это важно, если у вас плохое интернет-соединение или вы работаете с закрытым исходным кодом.
Итог прост: плагин заслуживает внимание, плюс с годами он становится всё лучше. Всё, что потребуется сделать для работы, — загрузить и установить Kite для вашего редактора.
«Секретное оружие» № 2: Mypy
Все знают, что Python — динамически типизированный язык. Если упрощённо, то переменная связывается с типом данных в момент присваивания ей значения, а не в момент объявления. В результате та же самая переменная бывает и целым числом, и строкой, и т. д. с учётом последнего присвоенного значения.
# К примеру, вот одна переменная с различными типами данных. # Python определяет тип данных динамически: # string var_name = "string here" # integer var_name = 1234
Теперь приведём примеры языков со статической типизацией, когда для каждой переменной задаётся определённый тип данных, и этого типа данных вам надо будет придерживаться.
# Для многих языков программирования предварительное объявление типа обязательно. # string str str_var_name = "string here" # integer int int_var_name = 1234
Достоинства и недостатки динамической типизации
Главный плюс в том, что если вам лень постоянно прописывать типы, Python в этом поможет. Но минусов тут больше: • на более поздних этапах разработки нередко возникают ошибки; • код работает медленнее, т. к. «Пайтон» постоянно вычисляет типы; • снижается безопасность кода, ведь на входе и выходе функции у той же самой переменной бывают различные типы данных; • становится сложнее и читать код, ведь читающий не уверен, что уже объявленная переменная не поменяет свой тип данных в дальнейшем.
Статическая типизация в Python
Статической типизации как таковой в Python нет, зато существуют аннотации типов, проверяемые статическими анализаторами для контроля типов переменных. И вот здесь на сцену выходит Mypy — статический анализатор типов для «Пайтона», позволяющий находить в коде ошибки несоответствия типов. Анализатор Mypy выведет ошибку, если при работе с аннотациями типов значение переменной не будет соответствовать присвоенному ей типу.
Посмотрим на следующий код:
from typing import Iterator def fib(n: int) -> Iterator[int]: a, b = 0, 1 while a < n: yield a a, b = b, a + b fib(10) fib("10")
Запустив Mypy, мы получим следующую ошибку:
main.py:10: error: Argument 1 to "fib" has incompatible type "str"; expected "int"
В нашем случае анализатор Mypy предупреждает, что мы хотим присвоить строковое значение переменной, имеющей целочисленный тип данных. В общем, более подробно про функциональные возможности лучше читать в документации, а протестировать инструмент можно в песочнице.
Таким образом, если код работает на проде, и его устойчивость к ошибкам, связанным с типизацией, очень важна, Mypy вам, безусловно, поможет.
«Секретное оружие» № 3: SonarLint
Сегодня линтер (статический анализатор потенциальных ошибок) есть почти во всех IDE. Как вы знаете, он «предугадывает» ошибки ещё до запуска кода, выделяя предполагаемые проблемы.
Но существует и динамический анализ, который не просто предугадывает, а реально запускает/компилирует части кода, определяя, работает ли он. И происходит это в фоновом режиме автоматически. Получается, что такой анализатор действительно «знает», что пойдёт не так. Именно таковым динамическим анализатором кода и является SonarLint.
Давайте посмотрим, какие проблемы он решает: 1. Проблему лишнего кода. Представьте, что вы забыли удалить закомментированные части кода, а также оставили неиспользуемые функции и другие рудименты. Благодаря SonarLint, вы получите предупреждение и сможете вовремя очистить свой код от всего лишнего. 2. Проблему уязвимости. В SonarLint есть большая и обновляемая БД, содержащая перечень уязвимостей. Она даёт возможность плагину своевременно предупреждать о любых известных уязвимостях, встречаемых в коде. 3. Проблему когнитивной сложности. Об этом подробнее лучше почитать здесь. Если кратко, то речь идёт о математической формуле, позволяющей оценить, насколько код читабелен. Это и просто, и полезно. В результате SonarLint предупредит вас о чрезмерной сложности, сопроводив объяснением, какое правило нарушено. К примеру, плагин среагирует на спагетти-код, указав на чрезмерную вложенность операторов if. В общем SonarLint позволяет писать более чистый и понятный код, используя лучшие практики.
Выводы
Итак мы рассмотрели следующие «секретные оружия» разработчика Python: • быстрый доступ к документации и ИИ-автодополнение с Kite; • статическая типизация кода с Mypy; • чистый код и быстрый поиск ошибок с SonarLint.
И, что не может не радовать, все эти инструменты бесплатны либо поставляются в нескольких вариантах, включая бесплатный.
Статья написана на основе «3 Insane Secret Weapons for Python».