3 полезных Python-инструмента для упрощения работы с кодом

Любой разработчик использует те или иные вспомогательные инструменты. Какие-то из них позволяют ускорить процесс, какие-то — избавиться от ошибок, сделать код более понятным.

Такие инструменты есть практически в любой сфере разработки.

Престон Бадир (Preston Badeer), Python-программист, поделился набором расширений которые, по его мнению, значительно упрощают и ускоряют кодинг. За 5 лет работы он перепробовал множество инструментов и выделил три наиболее полезных.

Kite: быстрый доступ к документации и автозаполнение на основе ИИ

У большинства IDE есть встроенная функция автозаполнения. Примерно так выглядит процесс работы с ними.

Эти инструменты используют внутреннюю документацию для автоматической подстановки параметров и имен функций. Но что если бы существовал инструмент, который способен помогать не только с именами функций, но и с часто используемыми кусками кода? А еще анализировал данные репозиториев GitHub и предлагал нужные подсказки. Такой инструмент есть. Kite умеет многое, но большинство важных функций можно разделить на три группы.

Smart-подсказки на основе ИИ

Kite изучает кодовую базу, запоминает название переменных, которые часто использует разработчик, имена параметров из интернета и документацию, чтобы выдавать контекстные рекомендации, например:

В примере показано, как Kite предсказывает какие переменные вы будете использовать в зависимости от контекста кода. Вот еще пример работы подсказок:

«Мы потратили большое количество времени на семантическую индексацию всего кода на GitHub, построение статистических выводов и обширных моделей, которые помогают использовать полученную информацию», — комментирует продукт CEO Kite Адам Смит.

Улучшенная работа с документацией

Если коллеги вам никогда не отправляли в рабочем чате «RTFM», значит, вы разработчик, который не допускает ошибок. Но, в любом случае, вы должны сначала ознакомиться с документацией, а затем уже спрашивать коллег о какой-то проблеме или искать ответы на вопросы на Stack Overflow. Чтение документации — важный этап создания программного кода. Более удобным его сделает Kite Copilot, который в режиме реального времени показывает описание подсвеченных курсором объектов и функций.

Ваш код остается с вами на локальном ПК

Kite создан для локальной работы и не отправляет код в облако. Скорость работы подсказок достаточно высокая. Это важно для тех, у кого медленный интернет или работа связана с закрытым/проприетарным кодом.

Я работаю с этим инструментом несколько лет, и он становится только лучше. Опробовать его можно прямо сейчас.

Улучшаем код с Mypy

Python — динамически типизированный язык, что позволяет в любое время сделать любую переменную с любым типом данных. Одна и та же переменная может быть как строкой, так и целым числом или иным типом данных в зависимости от последнего присвоенного значения. Это ускоряет процесс написания кода, когда разработчику не нужно каждый раз вручную назначать тип данных для переменных:

# These two variable types are declared the exact same way
# Python figures out the data type on it's own, dynamically
# string
var_name = "string here"
# integer
var_name = 1234

А вот пример языка со статической типизацией, где каждой переменной задается конкретный тип данных, чего необходимо придерживаться в логике:

# Many languages require the data type to be declared too
# string
str var_name = "string here"
# integer
int var_name = 1234

В динамическом подходе есть и минусы:

  • К концу процесса разработки повышается риск столкнуться с ошибками, так что придется переписывать какие-то части кода.
  • Из-за постоянного вычисления типов код работает медленнее.
  • Из-за динамической типизации код становится небезопасным, так как у функции на входе и выходе могут быть разные типы данных у одной и той же переменной.
  • Читать динамический код сложнее, поскольку другой разработчик не может быть на 100% уверен в том, что объявленная ранее переменная не изменит тип.

Бесплатный инструмент Mypy внедряет статическую типизацию в код. Он позволяет находить ошибки несоответствия типов в коде. Если обнаружено несоответствие значение переменной присвоенному типу, выводится ошибка.

# Declaring a function using normal dynamic typing, without mypy
def iter_primes():
    # code here
# Declaring the same function with mypy static typing
from typing import Iterator
def iter_primes() -> Iterator[int]:
    # code here

Это самый простой пример из целого списка. Если вам нужно больше информации, переходите по ссылке. Кроме того, в документации Mypy есть обширный FAQ.

Быстрый поиск ошибок и написание простых функций с SonarLint

У большинства IDE есть линтеры, статические анализаторы ошибок. Линтер еще до запуска кода может найти ошибку. Это считается статистическим анализом кода.

Но есть еще и динамический анализ, который в фоновом режиме запускает/компилирует код, проверяя правильность его работы. И если что-то идет не так, сообщает о возможной ошибке. Как раз по такому принципу работает бесплатный проект SonarLint.

Закомментированный или неиспользуемый код

Каюсь, бывает, что я оставляю операторы вывода, закомментированный код и неиспользуемые функции по всей кодовой базе. SonarLint предупреждает об этих проблемах, показывая, где что находится. Без SonarLint поиск проблем и отладка может занять многие часы.

Проблемы с безопасностью

У SonarLint есть большая обновляемая база данных с перечнем уязвимостей, которая позволяет плагину вовремя предупреждать разработчика о найденных в коде проблемах.

Читаемость кода

SonarLint предупреждает о чрезмерном усложнении кода, объясняя суть проблемы. Это может быть, например, слишком большая вложенность операторов if.

В качестве вывода

Небольшое резюме, чтобы не забыть описанные в статье инструменты в:

А какие полезные инструменты для работы с Python используете вы?

Эта статья является переводом.
Оригинальный текст:

3 Insane Secret Weapons for Python by Preston Badeer.

Что еще почитать по теме

T-Rex 21 сентября 2022

Гипервизор VMware ESXi: функции и отличия от ESX

В статье рассказываем о работе с гипервизором ESXi, его отличиях от ESX и vSphere.
T-Rex 21 сентября 2022
Андрей Салита 14 сентября 2022

Отличия TCP- и UDP-протоколов — определяем разницу на примерах

Рассматриваем два самых популярных протокола транспортного уровня — протоколы TCP и UDP — и сравниваем их.
Андрей Салита 14 сентября 2022
Владимир Туров 7 сентября 2022

Bat-файлы — их создание и команды

Рассмотрим мощный инструмент автоматизации рутинных задач в семействе операционных систем Windows.
Владимир Туров 7 сентября 2022

Новое в блоге

Михаил Фомин 24 июня 2022

Docker Swarm VS Kubernetes — как бизнес выбирает оркестраторы

Рассказываем, для каких задач бизнесу больше подойдет Docker Swarm, а когда следует выбрать Kubernetes.
Михаил Фомин 24 июня 2022
Ульяна Малышева 30 сентября 2022

«Нулевой» локальный диск. Как мы запустили облако только с сетевыми дисками и приручили Ceph

Чем хороши сетевые диски и почему именно Ceph, рассказал директор по развитию ядра облачной платформы Иван Романько.
Ульяна Малышева 30 сентября 2022
Валентин Тимофеев 30 сентября 2022

Как проходит онбординг сотрудников ИТО? Что нужно, чтобы выйти на смену в дата-центр

Рассказываем, как обучаем новых сотрудников, какие задачи и испытания проходят инженеры прежде, чем выйти на свою первую смену.
Валентин Тимофеев 30 сентября 2022
T-Rex 28 сентября 2022

Книги по SQL: что почитать новичкам и специалистам

Собрали 6 книг, которые помогут на старте изучения SQL и при углублении в тему.
T-Rex 28 сентября 2022