Три простых способа заметно улучшить ваш код на Python
Этот пост будет коротким и по существу. Вот три простых и действенных способа, с помощью которых я заметно улучшил свой код на Python, при этом сделал это с минимальными усилиями.
Итак, вот что я начал делать нового:
- Прислушивался к советам линтера.
- Использовал прекоммит.
- Реализовал подсказку типов.
Я знаю, что некоторые читатели знакомы с этими тремя техниками — хотя в начале 2021 года я не был знаком с ними, и я хотел поделиться с теми, кто начал этот год в похожем положении новичка.
SonarLint
SonarLint – мой любимый линтер. Это бесплатное расширение не только обнаружило проблемы в моем коде, но и предоставило документацию и примеры по каждой выявленной проблеме. Поскольку оно интегрируется в VS Code и PyCharm, было очень легко принять решение включить его в мой рабочий процесс для повышения качества кода. Благодаря этому я узнал, когда следует использовать оператор else после цикла for или while, использовать элементы управления итерациями в блоках try/except, а также потратил много времени на уменьшение сложности и увеличение наглядности моих методов.
Документация и расширение здесь: https://www.sonarlint.org/
Pre-commit
Этот инструмент позволяет стандартизировать проверку качества кода перед тем, как сохранить и поделиться своими изменениями. Он невероятно полезен и предоставляет метод для выполнения статического анализа кода. С помощью простой конфигурации я могу использовать black для форматирования кода, isort для сортировки импортов, mypy для проверки на проблемы с типизацией (подробнее об этом чуть позже), flake8 для поиска стилистических ошибок и нарушений конвенций кода, и многие другие проверки.
Документация об этом: https://pre-commit.com/
Пример конфигурации:
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.3.0
hooks:
- id: check-yaml
- id: end-of-file-fixer
- id: trailing-whitespace
- repo: https://github.com/psf/black
rev: 19.3b0
hooks:
- id: black
- repo: https://github.com/pycqa/isort
rev: 5.10.1
hooks:
- id: isort
name: isort (python)
- repo: https://github.com/pre-commit/mirrors-mypy
rev: 'v0.910-1'
hooks:
- id: mypy
- repo: https://github.com/pycqa/flake8
rev: '4.0.1'
hooks:
- id: flake8
Я с нетерпением жду возможности узнать больше об этом и, возможно, поделиться своими собственными pre-commit hooks.
Горячая подсказка типа
Это работает рука об руку с pre-commit. После внедрения проверок mypy в pre-commit я потратил время на доработку существующего кода для использования подсказок типов, чтобы mypy мог использовать этот контекст и искать возможные ошибки. Документация по типизации в Python превосходна и помогла определить, как и когда использовать различные классы типизации.
Одним из моих любимых является класс TypedDict. Он позволяет определять структурированные словари с необходимыми ключами и значениями. С его помощью мы можем определять структуру данных JSON, которые мы передаем между классами. Это, безусловно, позволило мне более надежно создавать интерфейсы и стандартизированные структуры для обмена данными между программами и системами.
Быстрый пример ниже:
from typing import List, TypedDict
class Weather(TypedDict):
high_temp: float
low_temp: float
summary: str
forecast: List[Weather] = [{
"high_temp": 40.3,
"low_temp": 34.7,
"summary": "Sunny"
}]
Что дальше?
Я надеюсь в этом году узнать больше о новых темах, хотя я уверен, что в следующем году я буду писать о том, о чем сейчас не знаю.
Мои планы таковы:
- Изучить внедрение методов функционального программирования и сокращение использования ненужных побочных эффектов.
- Погрузиться в JavaScript и узнать больше о фронт-энде и асинхронной разработке.
- Развитие навыков работы с инструментами DevOps, такими как ansible, terraform и packer.
А какие техники вы переняли в этом году? Что вы надеетесь развить в этом году? Пишите тут в комментах, или в наших социальных сетях.


Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: