Содержание
Яворски Python Лучшие практики и инструменты
- 300 лет Екатеринбургу
- Акции
- Книги
- Художественная литература
- Художественная литература
- Детективы
- Поэзия
- Фантастика
- Подарочные и эксклюзивные издания
- Прикладная литература.
Досуг
- Дом, быт
- Домашние животные, аквариум, пчеловодство
- Рукоделие
- Садоводство
- Спорт
- Кулинария
- Специализированная литература
- Военная техника и оружие, униформа, награды
- Эзотерика
- Философия
- Искусство, культура, кино и эстрада
- Архитектура
- Музыка
- История
- Краеведение
- Мать и дитя
- Медицина специальная
- Медицина и здоровье
- Наука и техника
- Автомобильная тематика
- Компьютер
- Психология
- Экономическая литература
- Юридическая литература
- Детская литература
- Детская школьная
- Детская дошкольная
- Раскраски
- Энциклопедии школьные, дошкольные
- Учебная и методическая литература.
Словари
- Учебная школьная литература
- Универсальные энциклопедии (справочники)
- Методика (школьная)
- Методика (дошкольная)
- Иностранные языки (словари, разговорники, самоучители, курсы)
- Иностранные языки (школьные учебники)
- Литература на иностранных языках
- Иностранные языки (худож.
)
- Иностранные языки (худож.
- Комиксы
Показать все книги
- Художественная литература
- Подарки и сувениры
- Игры и игрушки
- Товары для творчества
- Календари
- Канцтовары
- Карты и путеводители
Компьютер
Показать описание
Новости
Python.
Лучшие практики и инструменты, Яворски М. , Зиаде Т. . Библиотека программиста , Прогресс книга , 9785446115891 2021г. 2282,50р.
Яворски М.
, Зиаде Т.
Серия: Библиотека программиста
Осталось всего 6 шт.
2282,50р.
-20% после регистрации
В наличии в 6 магазинах
Ангарск, ПродаЛитЪ Ангарск Центр
Иркутск, ПродаЛитЪ Cash&Carry
Иркутск, ПродаЛитЪ Мир книг
Иркутск, ПродаЛитЪ Модный Квартал
Посмотреть все магазины
Цена в магазине может отличаться
от цены, указанной на сайте.
Поделиться ссылкой в:
Издательство:Прогресс книга
Бренд:Питер Книга
ISBN:978-5-4461-1589-1
Штрих-код:9785446115891
Страниц:560
Тип обложки:Мягкая
Год:2021
НДС:10%
Вес:1
Возраст:от 16 лет
Код:102060
Описание
Нужно решить конкретную задачу, а перед вами куча непонятных данных, в которой черт ногу сломит? «Байесовская статистика» расскажет, как принимать правильные решения, задействуя свою интуицию и простую математику.
Пора забыть про заумные и занудные университетские лекции! Эта книга даст вам полное понимание байесовской статистики буквально «на пальцах» — с помощью простых объяснений и ярких примеров.
Чтобы узнать, как применить байесовские подходы к реальной жизни, вы отправитесь на охоту за НЛО, поиграете в «Лего», рассчитаете вероятность выживания Хана Соло при полете через поле астероидов, а также узнаете, как оценить вероятность того, что вы не заболели (ковидом?!), несмотря на то, что нагуглили все симптомы родильной горячки.
Прикладные задачи и упражнения помогут закрепить материал и заложить фундамент для работы с широким спектром задач: от невероятных текущих событий до ежедневных сюрпризов делового мира.
Вы научитесь:
Работать с распределениями и неопределенностями.
Сравнивать гипотезы и делать надежные выводы.
Использовать теорему Байеса.
Делать оценку апостериорной вероятности и проверять правильность собственных выводов.
Всегда выбирайте лучшее!
Смотреть все
2086,00р.
-20% после регистрации
Грокаем функциональное мышление
(2023 г.)
Норманд Эрик
1773,00р.
-20% после регистрации
Основы Python для Data Science
(2023 г.)
Берман Кеннеди
1654,00р.
-20% после регистрации
Внутри CPYTHON: гид по интерпретатору Python
(2023 г.)
Шоу Энтони
1725,00р.
-20% после регистрации
Алгоритмы на практике
(2023 г.)
Зингаро Даниэль
1452,00р.
-20% после регистрации
Грокаем алгоритмы искусcтвенного интеллекта
(2023 г.)
Харбанс Ришал
1959,00р.
-20% после регистрации
Kafka Streams и ksqlDB: данные в реальном времени
(2023 г.)
Сеймур Митч
1636,00р.
-20% после регистрации
40 алгоритмов, которые должен знать каждый программист на Python
(2023 г.
)
Ахмад Имран
849,00р.
-20% после регистрации
Чистый код: Создание, анализ и рефакторинг
(2023 г.)
Мартин Роберт
1184,00р.
-20% после регистрации
Computer Science для программиста-самоучки. Все что нужно знать о структурах данных и алгоритмах
(2023 г.)
Альтхофф Кори
2237,00р.
-20% после регистрации
Pandas в действии
(2023 г.)
Пасхавер Борис
2840,00р.
-20% после регистрации
Математические алгоритмы для программистов. 3D-графика, машинное обучение и моделирование на Python
(2023 г.)
Орланд Пол
1427,00р.
-20% после регистрации
Пять строк кода
(2023 г.)
Клаусен Кристиан
1797,00р.
-20% после регистрации
Знакомство с Python
(2023 г.)
Бейдер Дэн, Эймос Дэвид, Яблонски Джоанна, Хейслер Флетчер
2081,00р.
-20% после регистрации
Тестирование JavaScript
(2023 г.
)
да Коста Л.
1357,00р.
-20% после регистрации
Python без проблем: решаем реальные задачи и пишем полезный код
(2023 г.)
Зингаро Даниэль
1398,00р.
-20% после регистрации
Изучаем Python: Программирование игр, визуализация данных, веб-приложения
(2023 г.)
Мэтиз Эрик
974,00р.
-20% после регистрации
Чистая архитектура. Искусство разработки программного обеспечения
(2023 г.)
Мартин Роберт
1416,00р.
-20% после регистрации
Большая книга проектов Python
(2023 г.)
Свейгарт Эл
1892,00р.
-20% после регистрации
Этичный хакинг. Практическое руководство по взлому
(2023 г.)
Грэм Дэниел Г.
1474,00р.
-20% после регистрации
Глубокое обучение на Python
(2023 г.)
Шолле Франсуа
Смотреть все
1536,50р.
-20% после регистрации
Django 3.0. Практика создания веб-сайтов на Python
(2022 г.
)
Дронов Владимир
1438,50р.
-20% после регистрации
Чистый Agile. Основы гибкости
(2021 г.)
Мартин Р.
1862,00р.
-20% после регистрации
Изучаем программирование на Python
(2022 г.)
Бэрри Пол
3314,00р.
-20% после регистрации
Библия Linux
(2022 г.)
Негус Кристофер
2317,00р.
-20% после регистрации
Делай как в Google.
Разработка программного обеспечения
(2021 г.)
Винтерс Тинтерс , Маншрек Тосм , Райт Хайрам
2744,00р.
-20% после регистрации
C# 9 и .NET 5. Разработка и оптимизация
(2022 г.)
Прайс Марк
1073,50р.
-20% после регистрации
CorelDRAW 2020
(2021 г.)
Комолова Н.
1113,00р.
-20% после регистрации
Программирование на PHP в примерах и задачах
(2021 г.)
Васильев Алексей
1340,00р.
-20% после регистрации
Совершенный алгоритм. Графовые алгоритмы и структуры данных
(2019 г.)
Рафгарден Т
955,50р.
-20% после регистрации
Язык C. Самое необходимое
(2020 г.)
Прохоренок Н.
2788,50р.
-20% после регистрации
Выразительный JavaScript. Современное веб-программирование
(2022 г.)
Хавербеке М.
1001,50р.
-20% после регистрации
Легкий способ выучить Python 3 еще глубже
(2020 г.
)
Шоу Зед А.
2825,00р.
-20% после регистрации
C# 8 и .NET Core. Разработка и оптимизация
(2021 г.)
Прайс Марк
2317,00р.
-20% после регистрации
The Game Console 2.0: История консолей от Atari до Xbox
(2023 г.)
Амос Эван
1244,00р.
-20% после регистрации
Глубокое обучение с подкреплением на Python. OpenAI Gym и TensorFlow для профи
(2020 г.)
Равичандиран Судхарсан
2636,00р.
-20% после регистрации
Unity и C#. Геймдев от идеи до реализации
(2022 г.)
Бонд Джереми Гибсон
1713,00р.
-20% после регистрации
Простой Python. Современный стиль программирования. 2-е изд.
(2023 г.)
Любанович Билл
890,00р.
-20% после регистрации
Великий Китайский Файрвол
(2022 г.)
Гриффитс Джеймс
2664,50р.
-20% после регистрации
Предиктивное моделирование на практике
(2019 г.
)
Кун М.
1053,00р.
-20% после регистрации
Экстремальное программирование: разработка через тестирование
(2022 г.)
Бек Кент
Tools & Best Practices — Real Python
В этой статье мы определим высококачественный код Python и покажем вам, как улучшить качество вашего собственного кода.
Мы проанализируем и сравним инструменты, которые вы можете использовать, чтобы вывести свой код на новый уровень. Независимо от того, используете ли вы Python некоторое время или только начинаете, вы можете извлечь пользу из описанных здесь методов и инструментов.
Что такое качество кода?
Конечно, вам нужен качественный код, а кому бы не хотелось? Но чтобы улучшить качество кода, мы должны определить, что это такое.
Быстрый поиск в Google дает много результатов, определяющих качество кода. Как оказалось, этот термин может означать для людей много разных вещей.
Один из способов определить качество кода — посмотреть на один конец спектра: высококачественный код. Надеюсь, вы согласитесь со следующими высококачественными идентификаторами кода:
.
- Он делает то, что должен делать.
- Не содержит дефектов или проблем.
- Его легко читать, поддерживать и расширять.
Эти три идентификатора, хотя и являются упрощенными, кажутся общепринятыми. Чтобы еще больше расширить эти идеи, давайте углубимся в то, почему каждая из них важна в сфере программного обеспечения.
Удалить рекламу
Почему качество кода имеет значение?
Чтобы понять, почему важен качественный код, давайте еще раз рассмотрим эти идентификаторы. Посмотрим, что произойдет, если код им не соответствует.
Он делает
, а не делает то, что должен делать
Соблюдение требований является основой любого продукта, программного обеспечения или чего-либо еще. Мы делаем программное обеспечение, чтобы что-то делать. Если в итоге не получится… ну это точно не качественно. Если он не соответствует базовым требованиям, его даже трудно назвать некачественным.
Это
содержит ли дефекты и проблемы
Если что-то, что вы используете, вызывает проблемы или вызывает у вас проблемы, вы, вероятно, не назовете это высококачественным. На самом деле, если это достаточно плохо, вы можете вообще прекратить его использовать.
Чтобы не использовать программное обеспечение в качестве примера, предположим, что ваш пылесос отлично работает на обычном ковре. Убирает всю пыль и кошачью шерсть. В одну роковую ночь кошка опрокидывает растение, рассыпая повсюду грязь. Когда вы пытаетесь использовать пылесос, чтобы убрать кучу грязи, он ломается, извергая грязь повсюду.
Несмотря на то, что пылесос работал при определенных обстоятельствах, он неэффективно справлялся со случайной дополнительной нагрузкой. Так что качественным пылесосом его не назовешь.
Это проблема, которую мы хотим избежать в нашем коде. Если что-то ломается в крайних случаях, а дефекты вызывают нежелательное поведение, у нас нет качественного продукта.
сложно читать, поддерживать или расширять
Представьте себе: клиент запрашивает новую функцию. Человек, написавший исходный код, ушел. Человек, который заменил их, теперь должен разобраться в уже существующем коде. Этот человек — вы.
Если код прост для понимания, вы сможете гораздо быстрее проанализировать проблему и найти решение. Если код сложный и запутанный, вы, вероятно, потратите больше времени и, возможно, сделаете несколько неверных предположений.
Также хорошо, если можно легко добавить новую функцию, не нарушая работу предыдущих функций. Если код , а не , который легко расширить, ваша новая функция может сломать другие вещи.
Никто не хочет, чтобы находились в положении, когда им приходится читать, поддерживать или расширять некачественный код. Это означает больше головной боли и больше работы для всех.
Достаточно того, что вам приходится иметь дело с некачественным кодом, но не ставьте других в такую же ситуацию. Вы можете улучшить качество кода, который вы пишете.
Если вы работаете с командой разработчиков, вы можете начать внедрять методы для повышения общего качества кода. При условии, что у вас есть их поддержка, конечно. Возможно, вам придется завоевать расположение некоторых людей (не стесняйтесь, присылайте им эту статью 😃).
Как улучшить качество кода Python
На пути к созданию высококачественного кода необходимо учитывать несколько моментов. Во-первых, это путешествие не является путешествием чистой объективности. Есть некоторые сильные представления о том, как выглядит высококачественный код.
Хотя мы надеемся, что все могут согласиться с упомянутыми выше идентификаторами, способ их достижения является субъективным. Наиболее упрямые темы обычно возникают, когда вы говорите о достижении удобочитаемости, сопровождения и расширяемости.
Так что имейте в виду, что, хотя в этой статье мы попытаемся сохранить объективность, в мире существует очень свое мнение, когда дело доходит до кода.
Итак, начнем с самой спорной темы: стиля кода.
Удалить рекламу
Руководства по стилю
Ах, да. Извечный вопрос: пробелы или табы?
Независимо от вашего личного взгляда на то, как представлять пробелы, можно с уверенностью предположить, что вы, по крайней мере, хотите согласованности кода.
Руководство по стилю служит для определения последовательного способа написания кода. Как правило, все это носит косметический характер, то есть не меняет логический результат кода. Хотя некоторые стилистические решения позволяют избежать типичных логических ошибок.
Руководства по стилю
помогают облегчить чтение, поддержку и расширение кода.
Что касается Python, то существует хорошо принятый стандарт. Его частично написал автор самого языка программирования Python.
PEP 8 предоставляет соглашения о кодировании для кода Python. Код Python довольно часто следует этому руководству по стилю. Это отличное место для начала, поскольку оно уже четко определено.
Родственное предложение по улучшению Python, PEP 257, описывает соглашения для строк документации Python, которые представляют собой строки, предназначенные для документирования модулей, классов, функций и методов. В качестве дополнительного бонуса, если строки документации непротиворечивы, существуют инструменты, способные генерировать документацию непосредственно из кода.
Все эти руководства определяют способ оформления кода. Но как вы обеспечиваете его выполнение? А дефекты и проблемы в коде, как их обнаружить? Вот где на помощь приходят линтеры.
Линтеры
Что такое линтер?
Во-первых, давайте поговорим о ворсе. Эти крошечные, раздражающие маленькие дефекты, которые каким-то образом появляются на всей одежде. Одежда выглядит и чувствует себя намного лучше без всего этого ворса. Ваш код ничем не отличается. Мелкие ошибки, стилистические несоответствия и опасная логика не сделают ваш код лучше.
Но все мы ошибаемся. Вы не можете ожидать, что всегда будете их вовремя ловить. Ошибки в именах переменных, забывание закрывающей скобки, неправильное использование табуляции в Python, вызов функции с неправильным количеством аргументов — список можно продолжать и продолжать. Линтеры помогают выявить эти проблемные области.
Кроме того, большинство редакторов и IDE имеют возможность запускать линтеры в фоновом режиме по мере ввода. Это приводит к среде, способной выделять, подчеркивать или иным образом идентифицировать проблемные области в коде перед его запуском. Это похоже на расширенную проверку орфографии для кода. Он подчеркивает проблемы волнистыми красными линиями, как это делает ваш любимый текстовый процессор.
Линтеры анализируют код для обнаружения различных категорий линтов. Эти категории можно в общих чертах определить следующим образом:
- Logical Lint
- Ошибки кода
- Код с потенциально непредвиденными результатами
- Опасные шаблоны кода
- Stylistic Lint
- Код, не соответствующий определенным соглашениям
Существуют также инструменты анализа кода, которые позволяют получить другие сведения о вашем коде. Хотя, возможно, это и не линтеры по определению, эти инструменты обычно используются бок о бок с линтерами. Они тоже надеются улучшить качество кода.
Наконец, существуют инструменты, которые автоматически форматируют код в соответствии с определенной спецификацией. Эти автоматизированные инструменты гарантируют, что наши низшие человеческие умы не нарушат условности.
Каковы параметры моего линтера для Python?
Прежде чем углубляться в ваши варианты, важно признать, что некоторые «линтеры» — это просто несколько линтеров, красиво упакованных вместе. Ниже приведены некоторые популярные примеры таких комбо-линтеров:
.
Flake8 : Возможность обнаружения как логического, так и стилистического ворса. Он добавляет проверки стиля и сложности pycodestyle к логическому обнаружению ворсинок PyFlakes. Он объединяет следующие линтеры:
- PyFlakes
- pycodestyle (ранее pep8)
- Маккейб
Pylama : Инструмент аудита кода, состоящий из большого количества линтеров и других инструментов для анализа кода. Он сочетает в себе следующее:
- pycodestyle (ранее pep8)
- pydocstyle (ранее pep257)
- PyFlakes
- Маккейб
- Пилинт
- Радон
- gjslint
Вот несколько автономных линтеров, распределенных по категориям с краткими описаниями:
Линтер | Категория | Описание |
---|---|---|
Пилинт | Логика и стилистика | Проверяет наличие ошибок, пытается обеспечить соблюдение стандарта кодирования, ищет запахи кода |
Пифлейкс | Логический | Анализирует программы и обнаруживает различные ошибки |
пикодстиль | Стилистический | Проверяет соответствие некоторым соглашениям о стилях в PEP 8 |
пидокстиль | Стилистический | Проверяет соответствие со строками документации Python |
Бандит | Логический | Анализирует код для поиска общих проблем безопасности |
MyPy | Логический | Проверяет необязательные статические типы |
А вот некоторые инструменты для анализа кода и форматирования:
Инструмент | Категория | Описание |
---|---|---|
Маккейб | Аналитический | Проверяет сложность Маккейба |
Радон | Аналитический | Анализирует код по различным показателям (строки кода, сложность и т.![]() |
Черный | Форматер | Форматирует код Python без компромиссов |
Изорт | Форматер | Импорт форматов путем сортировки по алфавиту и разделения на разделы |
Сравнение линтеров Python
Давайте лучше разберемся, что разные линтеры способны отлавливать и как выглядит результат. Для этого я прогнал один и тот же код через несколько разных линтеров с настройками по умолчанию.
Код, который я прогнал через линтеры, приведен ниже. Он содержит различные логические и стилистические вопросы:
1""" 2code_with_lint.py 3Пример кода с большим количеством мусора! 4""" 5импорт io 6из математического импорта * 7 8 9из времени импортировать время 10 11some_global_var = 'ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ НАЗВАНИЯ ДОЛЖНЫ БЫТЬ В ALL_CAPS_WITH_UNDERSCOES' 12 13def умножить (х, у): 14 """ 15 Это возвращает результат умножения входных данных 16 """ 17 some_global_var = 'на самом деле это локальная переменная...' 18 результат = х * у 19 вернуть результат 20, если результат == 777: 21 print("джекпот!") 22 23def is_sum_lucky(x, y): 24 """Это возвращает строку, описывающую, удачна ли сумма ввода. 25 Эта функция сначала проверяет правильность введенных данных, а затем вычисляет 26 сум. Затем он определит сообщение для возврата в зависимости от того, 27 эту сумму следует считать "счастливой" 28 """ 29если х != Нет: 30, если y не None: 31 результат = х+у; 32, если результат == 7: 33 вернуть "счастливое число!" 34 еще: 35 return('несчастливое число!') 36 37 return («просто обычный номер») 38 39класс 40 41 def __init__(self, some_arg, some_other_arg, verbose = False): 42 self.some_other_arg = some_other_arg 43 self.some_arg = some_arg 44 list_comprehension = [((100/значение)*pi) для значения в some_arg, если значение != 0] 45 время = время() 46 из даты и времени импортировать дату и время 47 date_and_time = datetime.now() 48 возвращение
В приведенном ниже сравнении показаны линтеры, которые я использовал, и время их выполнения для анализа вышеуказанного файла. Я должен отметить, что они не полностью сопоставимы, поскольку они служат разным целям. PyFlakes, например, не идентифицирует стилистические ошибки, как это делает Pylint.
Линтер | Команда | Время |
---|---|---|
Пилинт | пилинт code_with_lint.py | 1,16 с |
Пифлейкс | pyflakes code_with_lint.py | 0,15 с |
пикодстиль | pycodestyle code_with_lint.py | 0,14 с |
пидокстиль | pydocstyle code_with_lint.py | 0,21 с |
Выходы каждого из них см. в следующих разделах.
Пилинта
Pylint — один из старейших линтеров (около 2006 г.), который до сих пор поддерживается в хорошем состоянии. Некоторые могут назвать это программное обеспечение закаленным в боях. Он существует уже достаточно давно, чтобы участники исправили большинство серьезных ошибок, а основные функции хорошо проработаны. (плохой пробел)
С: 29(плохой пробел)
C: 40, 0: отсутствует последняя новая строка (missing-final-newline)
W: 6, 0: переопределение встроенного ‘pow’ (redefined-builtin)
W: 6, 0: математика импорта подстановочных знаков (импорт подстановочных знаков)
C: 11, 0: имя константы «some_global_var» не соответствует стилю именования UPPER_CASE (недопустимое имя)
C: 13, 0: имя аргумента «x» не соответствует стилю именования змеиного регистра (недопустимое имя)
C: 13, 0: имя аргумента «y» не соответствует стилю именования змеиного регистра (недопустимое имя)
C: 13, 0: Отсутствует строка документации функции (отсутствует строка документации)
W: 14, 4: переопределение имени ‘some_global_var’ из внешней области видимости (строка 11) (переопределенное-внешнее-имя)
W: 17, 4: Недостижимый код (недостижимый)
W: 14, 4: неиспользуемая переменная ‘some_global_var’ (неиспользуемая переменная)
…
R: 24,12: Ненужное «else» после «return» (без возврата)
R: 20, 0: либо все операторы return в функции должны возвращать выражение, либо ни один из них не должен возвращать выражение. (несовместимые операторы возврата)
C: 31, 0: Отсутствует строка документации класса (отсутствует строка документации)
W: 37, 8: Переопределение имени «время» из внешней области (строка 9) (переопределенное-внешнее-имя)
E: 37,15: Использование переменной «время» перед назначением (используется перед назначением)
W: 33,50: неиспользуемый аргумент «подробный» (неиспользованный аргумент)
W: 36, 8: неиспользуемая переменная list_comprehension (неиспользуемая переменная)
W: 39, 8: Неиспользуемая переменная date_and_time (неиспользуемая переменная)
R: 31, 0: Слишком мало общедоступных методов (0/2) (слишком мало общедоступных методов)
W: 5, 0: Неиспользованный импорт io (unused-import)
W: 6, 0: неиспользуемый импорт acos из импорта подстановочных знаков (unused-wildcard-import)
…
W: 9, 0: Неиспользованное время, импортированное из времени (unused-import)
Обратите внимание, что я сжал это многоточием для похожих линий. Это довольно сложно понять, но — это много ворса в этом коде.
Обратите внимание, что Pylint ставит перед каждой проблемной областью префикс R
, C
, W
, E
или F
, что означает:
- [Рефакторинг] для нарушения метрики «надлежащей практики»
- [C]конвенция о нарушении стандарта кодирования
- [Предупреждение о стилистических проблемах или незначительных проблемах с программированием
- [E]ошибка из-за важных проблем с программированием (то есть, скорее всего, ошибка)
- [F]atal для ошибок, препятствовавших дальнейшей обработке
Приведенный выше список взят непосредственно из руководства пользователя Pylint.
PyFlakes
Pyflakes «дает простое обещание: он никогда не будет жаловаться на стиль и будет очень, очень стараться никогда не выдавать ложных срабатываний». Это означает, что Pyflakes не сообщит вам об отсутствующих строках документации или именах аргументов, не соответствующих стилю именования. Основное внимание уделяется логическим проблемам кода и потенциальным ошибкам.
Преимущество здесь в скорости. PyFlakes работает за долю времени, которое занимает Pylint.
Вывод после запуска заполненного ворсом кода сверху:
code_with_lint.py:5: 'io' импортирован, но не используется code_with_lint.py:6: используется «из математического импорта *»; не удалось обнаружить неопределенные имена code_with_lint.py:14: локальная переменная 'some_global_var' назначена, но никогда не используется code_with_lint.py:36: 'pi' может быть не определено или определено из звездного импорта: math code_with_lint.py:36: локальная переменная list_comprehension назначена, но никогда не используется code_with_lint.py:37: локальная переменная «время» (определена в охватывающей области в строке 9) ссылка перед назначением code_with_lint.py:37: локальная переменная «время» назначена, но никогда не используется code_with_lint.py:39: локальная переменная date_and_time назначается, но никогда не используется
Недостатком здесь является то, что синтаксический анализ этого вывода может быть немного сложнее. Различные проблемы и ошибки не помечены и не организованы по типу. В зависимости от того, как вы это используете, это может вообще не быть проблемой.
pycodestyle (ранее pep8)
Используется для проверки некоторых соглашений о стиле из PEP8. Соглашения об именах не проверяются, как и строки документации. Ошибки и предупреждения, которые он улавливает, классифицируются в этой таблице.
Вывод после запуска заполненного ворсом кода сверху:
code_with_lint.py:13:1: E302 ожидал 2 пустые строки, нашел 1 code_with_lint.py:15:15: E225 отсутствует пробел вокруг оператора code_with_lint.py:20:1: E302 ожидал 2 пустые строки, нашел 1 code_with_lint.py:21:10: сравнение E711 с None должно быть «если условие не равно None:» code_with_lint.py:23:25: оператор E703 заканчивается точкой с запятой code_with_lint.py:27:24: пробел E201 после '(' code_with_lint.py:31:1: E302 ожидал 2 пустые строки, нашел 1 code_with_lint.py:33:58: E251 неожиданные пробелы вокруг ключевого слова/параметра равны code_with_lint.py:33:60: E251 неожиданные пробелы вокруг ключевого слова/параметра равны code_with_lint.py:34:28: E221 несколько пробелов перед оператором code_with_lint.py:34:31: E222 несколько пробелов после оператора code_with_lint.py:35:22: E221 несколько пробелов перед оператором code_with_lint.py:35:31: E222 несколько пробелов после оператора code_with_lint.py:36:80: строка E501 слишком длинная (83 > 79персонажи) code_with_lint.py:40:15: W292 без новой строки в конце файла
Преимущество этого вывода в том, что ворсинки помечены по категориям. Вы можете игнорировать определенные ошибки, если не хотите придерживаться определенного соглашения.
pydocstyle (ранее pep257)
Очень похож на pycodestyle, за исключением того, что вместо проверки соглашений о стиле кода PEP8 он проверяет строки документации на соответствие соглашениям PEP257.
Вывод после запуска заполненного ворсом кода сверху:
code_with_lint.py:1 на уровне модуля: D200: однострочная строка документации должна помещаться на одной строке с кавычками (найдено 3) code_with_lint.py:1 на уровне модуля: D400: первая строка должна заканчиваться точкой (не '!'). code_with_lint.py:13 в публичной функции `multiply`: D103: Отсутствует строка документации в общедоступной функции. code_with_lint.py:20 в публичной функции is_sum_lucky: D103: Отсутствует строка документации в общедоступной функции. code_with_lint.py:31 в публичном классе SomeClass: D101: Отсутствует строка документации в общедоступном классе. code_with_lint.py:33 в общедоступном методе `__init__`: D107: Отсутствует строка документации в __init__
Опять же, как и pycodestyle, pydocstyle помечает и классифицирует различные найденные ошибки. И список не конфликтует ни с чем из pycodestyle, так как все ошибки имеют префикс D
для строки документации. Список этих ошибок можно найти здесь.
Код без ворса
Вы можете настроить ранее заполненный линтом код на основе вывода линтера, и вы получите что-то вроде следующего:
1"""Пример кода с меньшим количеством ворсинок.""" 2 3из математики импорт пи 4от времени импорта времени 5из даты и времени импортировать дату и время 6 7SOME_GLOBAL_VAR = 'ГЛОБАЛЬНЫЕ НАЗВАНИЯ VAR ДОЛЖНЫ БЫТЬ В ALL_CAPS_WITH_UNDERSCOES' 8 910def умножить (первое_значение, второе_значение): 11 """Вернуть результат умножения входных данных.""" 12 результат = первое_значение * второе_значение 13 14, если результат == 777: 15 print("джекпот!") 16 17 вернуть результат 18 19 20def is_sum_lucky(первое_значение, второе_значение): 21 """ 22 Возвращает строку, описывающую, является ли сумма ввода удачной. 23 24 Эта функция сначала проверяет правильность введенных данных, а затем вычисляет 25 сум. Затем он определит сообщение для возврата в зависимости от того, 26 эту сумму следует считать «счастливой». 27 """ 28, если first_value не равно None и second_value не равно None: 29результат = первое_значение + второе_значение 30, если результат == 7: 31 сообщение = 'счастливое число!' 32 еще: 33 сообщение = 'несчастливое число!' 34 еще: 35 сообщение = 'неизвестный номер! Не удалось подсчитать сумму.
..' 36 37 ответное сообщение 38 39 40класс 41 """Это строка документации класса.""" 42 43 def __init__(self, some_arg, some_other_arg): 44 """Инициализировать экземпляр SomeClass.""" 45 self.some_other_arg = some_other_arg 46 self.some_arg = some_arg 47 list_comprehension = [ 48 ((100/значение)*пи) 49для значения в some_arg 50, если значение != 0 51 ] 52 текущее_время = время() 53 date_and_time = datetime.now() 54 print(f'создал экземпляр SomeClass во время unix: {current_time}') 55 print(f'дата-время: {дата_и_время}') 56 print(f'некоторые вычисляемые значения: {list_comprehension}') 57 58 по определению some_public_method(self): 59 """Это строка документации метода.""" 60 проходов 61 62 по определению some_other_public_method(self): 63 """Это строка документации метода.""" 64 прохода
Этот код не содержит ворсинок согласно приведенным выше линтерам. Хотя сама логика в основном бессмысленна, вы можете видеть, что как минимум обеспечивается согласованность.
В приведенном выше случае мы запускали линтеры после написания всего кода. Однако это не единственный способ проверки качества кода.
Удалить рекламу
Когда я смогу проверить качество своего кода?
Вы можете проверить качество своего кода:
- Как пишешь
- При регистрации
- Когда вы запускаете тесты
Полезно часто запускать линтеры для вашего кода. Если нет автоматизации и согласованности, большая команда или проект могут легко упустить из виду цель и начать создавать код более низкого качества. Это происходит медленно, конечно. Какая-то плохо написанная логика или, может быть, какой-то код с форматированием, не соответствующим соседнему коду. Со временем вся эта грязь накапливается. В конце концов, вы можете застрять с чем-то глючным, трудным для чтения, трудным для исправления и трудным в обслуживании.
Чтобы этого избежать, чаще проверяйте качество кода!
Как вы пишете
Вы можете использовать линтеры при написании кода, но настройка вашей среды для этого может потребовать дополнительной работы. Как правило, это вопрос поиска плагина для вашей IDE или редактора. На самом деле в большинстве IDE уже есть встроенные линтеры.
Вот некоторая общая информация о линтинге Python для различных редакторов:
- возвышенный текст
- VS Код
- Атом
- Вим
- Эмакс
Перед регистрацией Код
Если вы используете Git, можно настроить хуки Git для запуска линтеров перед фиксацией. В других системах контроля версий есть аналогичные методы для запуска скриптов до или после некоторых действий в системе. Вы можете использовать эти методы для блокировки любого нового кода, который не соответствует стандартам качества.
Хотя это может показаться радикальным, принудительная проверка каждого бита кода на наличие ворсинок — важный шаг к обеспечению постоянного качества. Автоматизация этого скрининга на входе в ваш код может быть лучшим способом избежать заполнения кода ворсинками.
При выполнении тестов
Вы также можете размещать линтеры непосредственно в любой системе, которую вы можете использовать для непрерывной интеграции. Линтеры могут быть настроены на сбой сборки, если код не соответствует стандартам качества.
Опять же, это может показаться радикальным шагом, особенно если в существующем коде уже есть много ошибок линтера. Чтобы бороться с этим, некоторые системы непрерывной интеграции позволяют вам отказаться от сборки только в том случае, если новый код увеличивает количество уже присутствующих ошибок линтера. Таким образом, вы можете начать улучшать качество, не переписывая весь существующий код.
Заключение
Высококачественный код делает то, что должен делать, без сбоев. Его легко читать, поддерживать и расширять. Он работает без проблем и дефектов и написан так, чтобы с ним было легко работать следующему человеку.
Надеюсь, само собой разумеется, что вы должны стремиться иметь такой высококачественный код. К счастью, существуют методы и инструменты, помогающие улучшить качество кода.
Руководства по стилю сделают ваш код более последовательным. PEP8 — отличная отправная точка для Python. Линтеры помогут выявить проблемные места и несоответствия. Вы можете использовать линтеры на протяжении всего процесса разработки, даже автоматизируя их, чтобы помечать заполненный линтом код до того, как он зайдет слишком далеко.
Если линтеры жалуются на стиль, это также избавляет от необходимости обсуждать стиль во время проверки кода. Некоторым людям может быть проще получить откровенный отзыв от этих инструментов, а не от члена команды. Кроме того, некоторые члены команды могут не захотеть «придираться» к стилю во время проверки кода. Линтеры избегают политики, экономят время и жалуются на любые несоответствия.
Кроме того, все линтеры, упомянутые в этой статье, имеют различные параметры командной строки и конфигурации, которые позволяют настроить инструмент по своему вкусу. Вы можете быть настолько строгим или настолько свободным, насколько хотите, и это важно понимать.
Повышение качества кода — это процесс. Вы можете предпринять шаги по его улучшению, не запрещая полностью весь несоответствующий код. Осознание — отличный первый шаг. Просто такой человек, как вы, впервые осознает, насколько важен высококачественный код.
Python Best Practices — Real Python
Статьи и руководства в этом разделе содержат передовые практики и другие «самородки мудрости», которые помогут вам писать более качественный, идиоматический и более Pythonic-код.
Здесь вы найдете специальные ресурсы, которые научат вас, как идиоматически использовать функции Python, что отличает его от других и чем написание кода на Python отличается от написания кода на другом языке.
Как язык программирования высокого уровня, Python предлагает большую гибкость и свободу реализации. Это может затруднить выбор «правильного способа» делать что-то, если есть несколько жизнеспособных подходов, из которых вы можете выбирать.
Наша цель — сделать вас лучшим — более эффективным, знающим и практичным — разработчиком Python. Вы получите максимальную отдачу от этой статьи, если у вас уже есть некоторые знания Python, и вы хотите перейти на следующий уровень.
Бесплатный бонус: 5 Thoughts On Python Mastery, бесплатный курс для Python-разработчиков, который показывает вам дорожную карту и образ мышления, которые вам понадобятся, чтобы вывести свои навыки Python на новый уровень.
Проверить, содержит ли строка Python подстроку
04 апр. 2023 г.
основы
лучшие практики
Python’s del: удаление ссылок из областей и контейнеров
03 апр. 2023 г.
основы
лучшие практики
питон
Когда следует использовать .__repr__() вместо .__str__() в Python?
22 марта 2023 г.
лучшие практики
средний
Выполнение сценариев Python с помощью Shebang
20 марта 2023 г.
лучшие практики
средний
Как оценить качество пакетов Python
15 марта 2023 г.
лучшие практики
средний
Документирование проектов Python с помощью Sphinx и чтение документации
14 марта 2023 г.
лучшие практики
средний
Как перебирать строки в pandas и почему этого делать не следует
30 января 2023 г.
лучшие практики
наука о данных
средний
Оператор присваивания Python: напишите надежные присваивания
16 января 2023 г.
лучшие практики
средний
питон
Операторы «in» и «not in» Python: проверка членства
19 декабря 2022 г.
основы
лучшие практики
питон
Упаковка повседневных проектов с помощью pyproject.toml
22 ноября 2022 г.
лучшие практики
средний
инструменты
Рефакторинг: подготовьте свой код, чтобы получить помощь
08 нояб. 2022 г.
лучшие практики
средний
Стоит ли обновляться до последней версии исправления ошибок Python?
02 нояб. 2022 г.
передовой
лучшие практики
devops
Создайте движок для игры в крестики-нолики с ИИ-игроком на Python
19 октября 2022 г.
передовой
лучшие практики
разработка игр
графический интерфейс
проекты
питон
Как добавить Python в PATH
26 сент. 2022 г.
основы
лучшие практики
devops
Что делать, если __name__ == «__main__» в Python?
21 сент. 2022 г.
лучшие практики
средний
Когда вы используете многоточие в Python?
19 сент. 2022 г.
лучшие практики
средний
Как заменить строку в Python
14 сентября 2022 г.
основы
лучшие практики
Создание интерфейсов командной строки с помощью argparse
06 сент. 2022 г.
лучшие практики
средний
Как проверить, содержит ли строка Python подстроку
22 августа 2022 г.
основы
лучшие практики
Управление атрибутами с помощью свойства Python()
26 июля 2022 г.
лучшие практики
средний
питон
Пользовательские словари Python: наследование от dict против UserDict
20 июля 2022 г.
лучшие практики
средний
питон
Использование Python и оператора
05 июля 2022 г.
основы
лучшие практики
питон
Как вы можете эмулировать циклы Do-While в Python?
20 июня 2022 г.
основы
лучшие практики
питон
LBYL против EAFP: предотвращение или обработка ошибок в Python
01 июня 2022 г.
лучшие практики
средний
питон
Повышайте свои навыки с помощью сообщества Real Python Slack
25 мая 2022 г.
лучшие практики
сообщество
Как опубликовать пакет Python с открытым исходным кодом в PyPI
23 мая 2022 г.
лучшие практики
средний
инструменты
Почему важно закрывать файлы в Python?
27 апр. 2022 г.
лучшие практики
средний
Утверждение Python: отлаживайте и тестируйте свой код как профессионал
лучшие практики
средний
питон
Python all(): проверьте ваши итерации на достоверность
основы
лучшие практики
питон
Зацикливание с Python enumerate()
основы
лучшие практики
Управление зависимостями с помощью Python Poetry
лучшие практики
devops
средний
инструменты
Написание идиоматического Python
основы
лучшие практики
питон
Выражения присваивания Python и использование оператора Walrus
лучшие практики
средний
Свойство Python(): добавление управляемых атрибутов к вашим классам
лучшие практики
средний
питон
Обратные строки в Python: reverse(), нарезка и многое другое
основы
лучшие практики
питон
Передача по ссылке в Python: лучшие практики
лучшие практики
средний
питон
Использование логического оператора «и» в Python
основы
лучшие практики
питон
Эффективное использование оператора возврата Python
основы
лучшие практики
питон