Этот пост будет коротким и по существу. Вот три простых и действенных способа, с помощью которых я заметно улучшил свой код на Python, при этом сделал это с минимальными усилиями.
Итак, вот что я начал делать нового:
Я знаю, что некоторые читатели знакомы с этими тремя техниками — хотя в начале 2021 года я не был знаком с ними, и я хотел поделиться с теми, кто начал этот год в похожем положении новичка.
SonarLint – мой любимый линтер. Это бесплатное расширение не только обнаружило проблемы в моем коде, но и предоставило документацию и примеры по каждой выявленной проблеме. Поскольку оно интегрируется в VS Code и PyCharm, было очень легко принять решение включить его в мой рабочий процесс для повышения качества кода. Благодаря этому я узнал, когда следует использовать оператор else после цикла for или while, использовать элементы управления итерациями в блоках try/except, а также потратил много времени на уменьшение сложности и увеличение наглядности моих методов.
Документация и расширение здесь: https://www.sonarlint.org/
Этот инструмент позволяет стандартизировать проверку качества кода перед тем, как сохранить и поделиться своими изменениями. Он невероятно полезен и предоставляет метод для выполнения статического анализа кода. С помощью простой конфигурации я могу использовать 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"
}] Я надеюсь в этом году узнать больше о новых темах, хотя я уверен, что в следующем году я буду писать о том, о чем сейчас не знаю.
Мои планы таковы:
А какие техники вы переняли в этом году? Что вы надеетесь развить в этом году? Пишите тут в комментах, или в наших социальных сетях.
На фоне роста спроса на ликвидность в бычьем рынке 2025 года, криптозаймы снова выходят на…
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…