Этот пост будет коротким и по существу. Вот три простых и действенных способа, с помощью которых я заметно улучшил свой код на 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" }]
Я надеюсь в этом году узнать больше о новых темах, хотя я уверен, что в следующем году я буду писать о том, о чем сейчас не знаю.
Мои планы таковы:
А какие техники вы переняли в этом году? Что вы надеетесь развить в этом году? Пишите тут в комментах, или в наших социальных сетях.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…