Вложенные условия vs плоские структуры
🕰️ Старый подход
def check_access(role, has_access):
if role == "admin":
if has_access:
return "Разрешено"
else:
return "Запрещено"
else:
return "Нет прав"
✨ Современная практика
def check_access(role, has_access):
if role != "admin":
return "Нет прав"
if not has_access:
return "Запрещено"
return "Разрешено"
💡 Почему лучше: guard clauses уменьшают вложенность, код читается сверху вниз как список правил. Меньше отступов — меньше когнитивной нагрузки.
Цепочные сравнения vs вложенные условия
🕰️ Старый подход
if x >= 0:
if x <= 100:
print("В диапазоне")
else:
print("Слишком большое")
else:
print("Отрицательное")
✨ Современная практика
if x < 0:
print("Отрицательное")
elif x > 100:
print("Слишком большое")
else:
print("В диапазоне")
💡 Почему лучше: цепочка
if-elif-else с guard clauses сразу показывает все случаи. Для проверки диапазона можно также использовать 0 <= x <= 100.
Импорт модулей
🕰️ Старый подход
from math import *
print(sqrt(16))
print(pi)
✨ Современная практика
import math
print(math.sqrt(16))
print(math.pi)
💡 Почему лучше: явный импорт позволяет понять, откуда взялась функция, и избежать конфликтов имён.
from module import * засоряет пространство имён и усложняет отладку.
Сравнение float
🕰️ Старый подход
a = 0.1 + 0.2
if a == 0.3:
print("Равно")
else:
print("Не равно") # сюда попадём
✨ Современная практика
import math
a = 0.1 + 0.2
if math.isclose(a, 0.3):
print("Равно")
else:
print("Не равно")
💡 Почему лучше:
math.isclose() учитывает погрешность представления float и даёт корректный результат для вычисленных значений.
Денежные расчёты
🕰️ Старый подход
price = 0.1
total = price * 3
print(total) # 0.30000000000000004
✨ Современная практика
from decimal import Decimal
price = Decimal('0.1')
total = price * 3
print(total) # 0.3
💡 Почему лучше:
Decimal хранит десятичные дроби точно. Для финансовых расчётов это стандарт де-факто.
Тернарный оператор vs полноценный if
🕰️ Старый подход
if age >= 18:
status = "Взрослый"
else:
status = "Ребёнок"
✨ Современная практика
status = "Взрослый" if age >= 18 else "Ребёнок"
💡 Почему лучше: для простого выбора между двумя значениями тернарный оператор короче и яснее. Для сложной логики лучше оставить обычный
if-else.