Не нарушайте принцип единственной ответственности
Функция должна делать одну вещь, делать её хорошо и только её.
Эта функция делает слишком много:
Проблема здесь в том, что расчёт промежуточной суммы, скидки и налога объединён в одну функцию. Любое изменение одного из этапов может повлиять на весь расчёт.
Лучше разбить логику на небольшие специализированные функции:
Так намного лучше.
Небольшие функции с одной задачей проще покрывать модульными тестами, потому что у них меньше зависимостей и требуется меньше моков.
Кроме того, изолированные компоненты проще переиспользовать в разных частях приложения или конвейера, не подтягивая лишние зависимости.
Поэтому держите функции простыми и сфокусированными.
Одна функция — одна ответственность.
👉 @PythonPortal
Функция должна делать одну вещь, делать её хорошо и только её.
Эта функция делает слишком много:
def calculate_final_total(
price: float,
quantity: int,
discount_rate: float,
tax_rate: float
) -> float:
# Расчёт промежуточной суммы
subtotal = price * quantity
# Применение скидки
discounted_amount = subtotal * (1 - discount_rate)
# Расчёт налога
final_total = discounted_amount * (1 + tax_rate)
return final_total
Проблема здесь в том, что расчёт промежуточной суммы, скидки и налога объединён в одну функцию. Любое изменение одного из этапов может повлиять на весь расчёт.
Лучше разбить логику на небольшие специализированные функции:
def calculate_subtotal(price: float, quantity: int) -> float:
return price * quantity
def apply_discount(subtotal: float, discount: float) -> float:
return subtotal * (1 - discount)
def calculate_tax(amount: float, tax_rate: float) -> float:
return amount * (1 + tax_rate)
Так намного лучше.
Небольшие функции с одной задачей проще покрывать модульными тестами, потому что у них меньше зависимостей и требуется меньше моков.
Кроме того, изолированные компоненты проще переиспользовать в разных частях приложения или конвейера, не подтягивая лишние зависимости.
Поэтому держите функции простыми и сфокусированными.
Одна функция — одна ответственность.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🤔1