Три «секретных оружия» Python | OTUS

Три «секретных оружия» Python

В этой статье мы поговорим об инструментах, которые упростят работу с кодом. Речь идёт об автозаполнении с ИИ, быстром поиске ошибок, статическом и динамическом анализе кода.

Когда опыт разработчика растёт, число используемых инструментов уменьшается, ведь многие из них вы со временем перерастаете. Но есть инструменты, которые вы будете продолжать использовать. О них и поговорим.

«Секретное оружие» № 1: Kite

Большинство современных редакторов кода имеют функцию автодополнения, которая выглядит приблизительно так:

0_XumnIVyz9qDKzCHf_2-20219-1d1acd.gif

Как правило, для определения имён и типов возможных параметров и функций встроенный инструмент использует документацию. А как вам вариант, когда редактор получает доступ к коду из всех публичных GitHub-репозиториев, начиная подтягивать не только имена, но и полноценные строки кода? Как раз это и реализовано в таком инструменте, как Kite. Есть как минимум три причины обратить на него внимание.

Причина 1: умные подсказки

Плагин Kite просматривает ваш код, переменные и наиболее часто применяемые имена параметров в комплексе. В результате, собрав все данные, он рекомендует что-то типа этого:

1_0j5lO_cwGUQH41dcHVfPoQ_1-20219-54d2f5.png

Также работу плагина вы можете посмотреть в этом коротком демонстрационном видео. И, если хотите, можете поиграться в песочнице.

Причина 2: Copilot для документации

Говорят, что не нужно беспокоить более опытного коллегу или тратить время на поиск ответов в Stack Overflow прежде, чем вы изучите документацию. А упростить поиск поможет Kite Copilot. Он функционирует параллельно с IDE, показывая информацию о любых функциях либо объектах, на которые наведён курсор.

0_Zbd8GjQnWzy2Ejhp_2-20219-c97a51.png

Причина 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. Как вы знаете, он «предугадывает» ошибки ещё до запуска кода, выделяя предполагаемые проблемы.

0_IqQCJIioNJTxagPJ_2-20219-fc4f4c.png

Но существует и динамический анализ, который не просто предугадывает, а реально запускает/компилирует части кода, определяя, работает ли он. И происходит это в фоновом режиме автоматически. Получается, что такой анализатор действительно «знает», что пойдёт не так. Именно таковым динамическим анализатором кода и является SonarLint.

Давайте посмотрим, какие проблемы он решает: 1. Проблему лишнего кода. Представьте, что вы забыли удалить закомментированные части кода, а также оставили неиспользуемые функции и другие рудименты. Благодаря SonarLint, вы получите предупреждение и сможете вовремя очистить свой код от всего лишнего. 2. Проблему уязвимости. В SonarLint есть большая и обновляемая БД, содержащая перечень уязвимостей. Она даёт возможность плагину своевременно предупреждать о любых известных уязвимостях, встречаемых в коде. 3. Проблему когнитивной сложности. Об этом подробнее лучше почитать здесь. Если кратко, то речь идёт о математической формуле, позволяющей оценить, насколько код читабелен. Это и просто, и полезно. В результате SonarLint предупредит вас о чрезмерной сложности, сопроводив объяснением, какое правило нарушено. К примеру, плагин среагирует на спагетти-код, указав на чрезмерную вложенность операторов if. В общем SonarLint позволяет писать более чистый и понятный код, используя лучшие практики.

Выводы

Итак мы рассмотрели следующие «секретные оружия» разработчика Python: • быстрый доступ к документации и ИИ-автодополнение с Kite; • статическая типизация кода с Mypy; • чистый код и быстрый поиск ошибок с SonarLint.

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

Статья написана на основе «3 Insane Secret Weapons for Python».

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто