python

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

  • четверг, 3 сентября 2020 г. в 00:32:47
https://habr.com/ru/company/selectel/blog/517486/
  • Блог компании Selectel
  • 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 используете вы?