Похожие презентации:
Lintery-Python-Kak-sdelat-vash-kod-idealnym (2)
1.
Линтеры Python: Каксделать ваш код
идеальным
2.
Что такое линтеры и зачем они нужны?Что такое линтеры?
Линтеры — это специальные программы, которые проверяют ваш Pythonкод на наличие ошибок, нарушений стиля и потенциальных проблем до
запуска программы.
Зачем нужны линтеры?
1.
Находят ошибки заранее. Линтеры обнаруживают опечатки, логические
ошибки и проблемы, которые Python пропустил бы при запуске. Это
экономит часы отладки.
2.
Соблюдение стандартов (PEP 8). Они следят за единым стилем кода:
правильные отступы, именование переменных, длина строк. Ваш код
выглядит профессионально.
3.
Улучшение читаемости. Чистый, отформатированный код проще
понимать вам и другим разработчикам. Это особенно важно в командной
работе.
4.
Предотвращение уязвимостей. Специальные линтеры безопасности
находят опасные конструкции, которые могут стать "дырами" в вашей
программе.
3.
Виды линтеров Python:Pylint
Black
Ruff
Самый комплексный анализатор. Проверяет
Строгий форматировщик. Автоматически
Быстрый и современный линтер. Совмещает
ошибки, стиль, логические проблемы и
приводит код к единому стилю, исключая
проверку стиля и ошибок с высокой
предлагает рефакторинг.
споры о форматировании.
производительностью.
Flake8
Mypy
Bandit
Это быстрый и практичный линтер, который
Статический анализатор типов. Проверяет
Специализированный линтер безопасности.
проверяет код на соответствие стандарту PEP
корректность типов данных с помощью
Обнаруживает уязвимости и опасные
8 и ищет простые логические ошибки.
аннотаций.
практики кодирования.
4.
Pylint: мощь и глубина анализаPylint анализирует ваш код, не запуская его, а строя абстрактное синтаксическое дерево (AST). Это позволяет ему выявлять широкий спектр
проблем:
Стиль кода (C-правила): Именование, документация, отступы
Рефакторинг (R-правила): Слишком сложные функции, избыточный код, плохие паттерны
Предупреждения (W-правила): Неиспользуемые переменные, потенциальные ошибки
Ошибки (E-правила): Критические проблемы, синтаксические ошибки
Оценка качества:
1. R0902 - TooManyAttributes: слишком много атрибутов (>7).Класс имеет более 7
атрибутов экземпляра. Слишком "толстый" класс нарушает принцип единственной
ответственности. Решение: разбить на несколько классов.
Pylint выставляет оценку от 1 до 10 баллов, где 10 — идеальный код. Это даёт чёткое представление об общем качестве кодовой базы.
2. R1702 - too_many_nested(): 6+ уровней вложенности.Функция имеет 6 или более уровней
вложенности.Решение: использовать ранние return, выносить вложенные блоки в отдельные
функции.
3. W0603 - modify_global(): изменение глобальной переменной.Функция изменяет
глобальную переменную. Это создаёт скрытые зависимости между функциями и усложняет
отладку. Решение: передавать значения через параметры, возвращать через return.
5.
Black: автоматический форматировщик кодаBlack — это автоматический форматтер кода для Python, который применяет
единый и неизменный стиль ко всему коду. Его основная философия —
прекратить бесконечные споры о форматировании в командах разработчиков.
Black не предлагает настроек и вариантов, он просто переписывает ваш код по
своим строгим правилам, делая его единообразным и читаемым.
1. Несогласованные отступы в списке my_list.Black форматирует код единообразно. В данном случае
Он не является линтером в классическом понимании, так как не ищет
добавит пробел после запятой.
логические ошибки или проблемы безопасности. Вместо этого он
фокусируется исключительно на внешнем виде кода: длине строк, отступах,
пробелах вокруг операторов, использовании кавычек и расположении скобок.
Работая по принципу «стиль без компромиссов», Black экономит время
разработчиков, избавляя их от рутинного ручного форматирования и
обеспечивая идентичный вид кода у всех членов команды.
2. Разное выравнивание в weird_alignment().Black удалит лишние пробелы и сделает выравнивание
Этот инструмент стал стандартом де-факто во многих проектах и часто
единообразным.
используется в паре с линтерами для обеспечения как качества логики, так и
чистоты оформления кода.
3. Смешанные отступы в bad_indent().В Python стандарт — 4 пробела на уровень отступа. Black
исправит на стандартные 4 пробела.
6.
Ruff: скорость и эффективностьRuff — это новый линтер, разработанный на Rust, который объединяет
в себе функционал линтера и форматировщика, при этом обеспечивая
исключительную производительность.
Работает в десятки раз быстрее таких линтеров, как Pylint и
Flake8, что критично для больших кодовых баз.
Поддерживает множество правил из разных линтеров и
форматировщиков, становясь универсальным инструментом.
1. B023 - захват переменной цикла в лямбде.Лямбда захватывает
переменную i, а не её значение на момент создания. Все лямбды видят
конечное значение i=4. Решение: lambda i=i: print(i).
Легко интегрируется в CI/CD процессы, позволяя быстро
проверять код на каждом коммите.
Ruff — отличный выбор для больших проектов и всех, кто ценит
скорость и эффективность в разработке.
2. PLC0414 - бесполезный алиас import os as
operating_system.Создан псевдоним для модуля, но в коде
используется оригинальное имя. Лишний код. Решение: удалить as
operating_system или использовать алиас.
7.
Flake8: простота и универсальностьFlake8 — это легковесный инструмент, который объединяет в себе
функционал трёх популярных инструментов для анализа Python
кода:
PyCodeStyle: Проверка на соответствие PEP8.
PyFlakes: Обнаружение логических ошибок и неиспользуемых
переменных.
1.
E702 - multiple_statements(): ; разделяет statements.В
Python точка с запятой используется для разделения нескольких
выражений на одной строке, но это плохая практика. Решение:
каждое выражение на отдельной строке.
McCabe: Измерение цикломатической сложности кода.
Flake8 прост в настройке и широко используется для выявления
распространённых ошибок и нарушений стиля. Он менее строг, чем
2. E265 - комментарий без пробела после #.Согласно PEP 8, после
Pylint, но при этом более гибок, чем Black, так как позволяет тонко
символа # должен быть один пробел. Решение: добавлять пробел:
настраивать правила проверки.
# комментарий.
Это отличный выбор для быстрого статического анализа и
поддержания базового уровня качества кода в проектах любого
размера.
3. E225 - x=5+3: нет пробелов вокруг =.Вокруг операторов
присваивания (=, +=, -= и т.д.) должны быть пробелы. Решение: x
= 5 + 3.
8.
Mypy: проверка типов для PythonMypy — это статический анализатор типов для Python. Он помогает
обнаруживать ошибки, связанные с типами данных, ещё до запуска программы,
значительно повышая надёжность кода.
Он использует аннотации типов (type hints), которые вы добавляете в свой код,
чтобы проверить, что переменные, аргументы функций и возвращаемые
значения имеют правильные типы. Это как дополнительный уровень контроля
качества для вашего кода.
Преимущества Mypy:
Раннее обнаружение ошибок: Выявляет ошибки на этапе разработки, а не в
1. process_numbers([1, 2, "три"]): строка в List[int].Функция ожидает
продакшене.
список целых чисел, но получает строку. Это вызовет ошибку при выполнении.
Улучшенная документация: Аннотации типов служат отличной формой
MyPy ловит это заранее.
документации, делая код более понятным.
Лучшая поддержка IDE: Интегрированные среды разработки (IDE) могут
использовать информацию о типах для более точного автодополнения и
рефакторинга.
Хотя использование Mypy является необязательным, оно становится всё более
2. Нет return type у no_return_type().
важным для разработки крупных и сложных проектов, где поддержание порядка
в типах данных критически важно.
В строгом режиме MyPy требует аннотаций возвращаемого типа. Решение:
добавить -> тип.
9.
Bandit: безопасность вашего кодаBandit — это специализированный линтер, сфокусированный на
безопасности Python-кода. Он сканирует ваш проект на предмет
распространённых уязвимостей и опасных практик кодирования.
Обнаруживает потенциальные проблемы, такие как жёстко
закодированные пароли, риски SQL-инъекций и небезопасные
криптографические функции.
B602 - shell=True в subprocess.run().shell=True позволяет
выполнить произвольный shell-код. Если в команду попадёт
Выявляет другие анти-паттерны безопасности, которые могут
пользовательский ввод, возможна инъекция. Решение: использовать
привести к критическим уязвимостям в продакшене.
shell=False и передавать команду как список: ["ls", "-la"].
Незаменим для любого кода, предназначенного для развертывания,
и для команд, ориентированных на безопасную разработку
(SecDevOps).
Благодаря лёгкой интеграции в CI/CD конвейеры, Bandit помогает
автоматизировать процесс проверки безопасности, обеспечивая
непрерывную защиту вашего приложения.
B101 - assert в функции check_access().В Python assert
отключается при запуске с флагом -O. В продакшене проверка не
выполнится. Решение: использовать обычные проверки: if not
user.is_admin: raise PermissionError().
10.
Как начать использоватьлинтеры?
01
Установка
Установите необходимые линтеры через pip:
pip install pylint flake8 black mypy bandit ruff
02
Запуск из командной строки
Выполните проверку вашего скрипта:
pylint my_script.pyflake8 my_script.pyblack my_script.pymypy my_script.pybandit
my_script.pyruff my_script.py
03
Интеграция в IDE
Большинство современных IDE (VS Code, PyCharm) имеют плагины для линтеров, обеспечивая проверку в
реальном времени.
11.
Практические советы илучшие практики
Комбинируйте инструменты
Black для автоматического форматирования, а Pylint или Ruff для глубокого
анализа ошибок и стиля.
Автоматизируйте проверки
Используйте pre-commit хуки для запуска линтеров перед каждым коммитом,
чтобы предотвратить попадание плохого кода в репозиторий.
Настройте уровень строгости
Настраивайте уровни предупреждений, чтобы избежать «шума» и
сосредоточиться на наиболее важных проблемах, актуальных для вашего
проекта.
Регулярно обновляйте
Следите за новыми версиями линтеров и актуальными правилами PEP, чтобы
ваш код всегда соответствовал современным стандартам.
12.
Реальные истории: как линтерыспасают проекты
70%
40%
90%
сокращение времени проверки кода
уменьшение количества багов на
улучшение читаемости и унификации
благодаря Ruff в стартапах.
продакшене в командах из 20+
кодовой базы в больших компаниях,
разработчиков после внедрения
таких как Google и Dropbox, благодаря
автоматического линтинга.
Pylint и Black.
Эти примеры демонстрируют, как линтеры становятся незаменимым инструментом для поддержания высокого качества кода и
эффективности командной работы.
13.
Итог: Линтеры — вашнезаменимый помощник
Линтеры не просто проверяют синтаксис; они активно способствуют созданию
высококачественного, читаемого и безопасного кода. Внедрение линтеров в ваш
рабочий процесс — это инвестиция, которая многократно окупится.
Линтеры повышают качество, читаемость и безопасность вашего Python-кода.
Они значительно экономят время на отладку и упрощают командную работу,
минимизируя конфликты стиля.
Начните использовать Pylint, Flake8, Black, Mypy, Bandit и Ruff уже сегодня,
чтобы сделать ваш код по-настоящему идеальным!
Готовы сделать ваш код лучше?
Вопросы? Мы готовы помочь вам внедрить линтеры в ваш проект и настроить их
под ваши специфические потребности!