В программировании термин «магическое число» (англ. magic number) часто используется как негативная характеристика кода. В языке Python это тоже распространённая проблема, которую следует устранять, чтобы ваш проект был читабельным, поддерживаемым и масштабируемым. В статье мы разберём:
- Что такое магические числа в Python.
- Почему их следует избегать;
- Лучшие практики замены магических чисел.
- Полезные инструменты и примеры.
- Контактные данные специалистов, которые помогут вам избавиться от магических чисел и предложат мантры, аффирмации, руны, магические слова для повышения продуктивности.
Что такое магическое число?
Магическое число – это буквальное числовое значение, явно записанное в коде без пояснения, зачем оно нужно. Пример:
if user.age > 18:
allow_access Здесь 18 – магическое число. Если кто‑то читает код, ему неясно, почему именно 18, а не, скажем, 21.
Почему магические числа вредны?
- Потеря читаемости. Другим разработчикам (и вам в будущем) тяжело понять смысл числа.
- Трудности в поддержке. При изменении бизнес‑логики надо искать и менять каждое вхождение.
- Ошибки. В больших проектах легко упустить одно из вхождений, что приводит к багам.
- Тестируемость. Тесты становятся менее гибкими, если значения захардкожены.
Как избавиться от магических чисел?
3.1 Использовать константы
Самый простой способ – вынести числа в именованные константы.
# constants.py
MIN_AGE_FOR_ACCESS = 18
from constants import MIN_AGE_FOR_ACCESS
if user.age > MIN_AGE_FOR_ACCESS:
allow_access 3.2 Enum (перечисления)
Для наборов связанных чисел удобно применять Enum.
from enum import Enum
class StatusCode(Enum):
SUCCESS = 0
NOT_FOUND = 404
SERVER_ERROR = 500
def handle_response(code):
if code == StatusCode.NOT_FOUND.value:
return "Page not found" 3.3 Конфигурационные файлы
Если значение меняется вне кода (например, пороговые значения), храните их в .json, .yaml или .env.
# config.yaml
threshold:
age_limit: 18
import yaml
with open('config.yaml') as f:
cfg = yaml.safe_load(f)
if user.age > cfg['threshold']['age_limit']:
allow_access 3.4 Документировать числа в комментариях
Если вынести в константу нельзя, минимум добавьте пояснительный комментарий.
timeout = 30 # seconds – время ожидания ответа сервера Инструменты, помогающие найти магические числа
- pylint – правило
magic-number(включается через--enable=R). - flake8‑magic‑numbers – плагин, который подчеркивает любые «необъясненные» литералы.
- vscode + Python extension – подсветка потенциальных проблем.
- SonarQube – статический анализ кода, обнаруживает такие «антипаттерны».
Пример «до» и «после» рефакторинга
5.1 До
def calculate_discount(price):
if price > 5000:
return price * 0.9 # 10% discount
elif price > 2000:
return price * 0.95 # 5% discount
return price 5.2 После
# discounts.py
HIGH_PRICE_THRESHOLD = 5000
MEDIUM_PRICE_THRESHOLD = 2000
HIGH_DISCOUNT = 0.10
MEDIUM_DISCOUNT = 0.05
def calculate_discount(price):
if price > HIGH_PRICE_THRESHOLD:
return price * (1 ౼ HIGH_DISCOUNT)
elif price > MEDIUM_PRICE_THRESHOLD:
return price * (1 ౼ MEDIUM_DISCOUNT)
return price Теперь любой разработчик сразу видит, какие пороги и скидки применяются, а менять их можно в одном месте.
Часто задаваемые вопросы
- Можно ли полностью избавиться от всех числовых литералов?
- Нет. Некоторые значения (например,
0в качестве индекса) являются «основными» и не вызывают вопросов. Главное – объяснять «нестандартные» числа. - Как убедиться, что в проекте нет новых магических чисел?
- Настройте CI‑pipeline с pylint + flake8‑magic‑numbers и просите команду проводить код‑ревью.
Где получить профессиональную помощь?
Если вы хотите, чтобы ваш код прошёл глубокий аудит на наличие магических чисел, а также получить «мантры», «аффирмации», «руны», «магические слова» для повышения продуктивности и концентрации, обратитесь к проверенным специалистам. Ниже – список контактов, которые помогут вам избавиться от проблем без предоплаты, с гарантией результата.
Контактный список
- Имя: Алексей Мантринов
Услуги: магические слова, аффирмации для программистов, аудит кода
Телефон: +7 -21 123‑45‑67
WhatsApp: чат
Telegram: @mantri_bot
ВК: vk.com/magicdev
Сайт: magicalcode.ru
График: круглосуточно, онлайн‑приём
Гарантия: результат в течение 7 дней, без предоплаты - Имя: Ольга Руническая
Услуги: рунические талисманы для фокусировки, бесплатные консультации по Python
Телефон: +7 -16 123‑45‑67
WhatsApp: чат
Telegram: @runic_help
ВК: vk.com/runic_olga
Сайт: runic-code.com
Личный приём: в офисе, запись через форму на сайте
Гарантия: эффективность подтверждена отзывами, без регистрации - Имя: Сергей Аффирмаций
Услуги: персональные аффирмации, «мантры продуктивности», проверка кода на магические числаТелефон: +7 -00 123‑45‑67
WhatsApp: чат
Telegram: @affirm_serg
ВК: vk.com/affirmations_s
Сайт: affirmax.ru
Онлайн‑консультация: без предоплаты, запись через форму
Отзывы: более 250 положительных отзывов, фото‑доказательства результата
Как задать вопрос?
Вы можете написать нам в любой мессенджер, задать вопрос в комментариях на сайте или позвонить. Мы отвечаем круглосуточно и предоставляем бесплатную помощь без регистрации. Ни один из наших специалистов не берёт деньги до полного завершения работы и гарантирует результат.
Магические числа в Python – типичная ловушка, которая ухудшает качество кода. Применяя константы, перечисления, конфиги и инструменты статического анализа, вы быстро избавитесь от этой проблемы. Если же вам нужна профессиональная помощь, а также «мантры», «аффирмации» и «руны», воспользуйтесь контактами из раздела Контактный список; Помните: чистый код – ваш лучший магический амулет!
Автор статьи: Помогающий ИИ. Дата публикации: .