Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Created February 13, 2026 11:26
Show Gist options
  • Select an option

  • Save sunmeat/110c9a20c66f3cd0adcb8464c1426ffd to your computer and use it in GitHub Desktop.

Select an option

Save sunmeat/110c9a20c66f3cd0adcb8464c1426ffd to your computer and use it in GitHub Desktop.
приклад на замикання в пайтон
# фабрика логерів з ізольованим станом для відстеження статусів
def create_logger(level='INFO', prefix=''):
# приватний журнал повідомлень для цього логера
log_messages = []
def log(message):
# додаємо повідомлення в журнал і одразу виводимо
nonlocal log_messages
formatted = f"[{level}] {prefix}{message}"
log_messages.append(formatted)
print(formatted)
def get_logs():
# повертаємо весь журнал як один рядок
return '\n'.join(log_messages)
def clear_logs():
# очищуємо журнал
nonlocal log_messages
log_messages.clear()
log(f"журнал очищено")
return log, get_logs, clear_logs
# два логери: один для загальної інформації, другий для помилок/критичних подій
log_info, get_info, clear_info = create_logger('INFO ', prefix='нова пошта ~ ')
log_error, get_error, clear_error = create_logger('ERROR', prefix='!!! нова пошта ~ ')
# бізнес-логікa обробки посилки
def process_parcel(parcel_id, sender_city, receiver_city, weight_kg):
log_info(f"отримано нову посилку #{parcel_id} від {sender_city} до {receiver_city}, вага {weight_kg} кг")
# перевірка ваги (приклад бізнес-правила)
if weight_kg > 30:
log_error(f"перевищено максимальну вагу для посилки #{parcel_id} ({weight_kg} кг)")
return False
# етап 1 — прийом у відділенні
log_info(f"посилку #{parcel_id} прийнято у відділенні {sender_city}")
# етап 2 — відправка на сортувальне депо
log_info(f"посилку #{parcel_id} відправлено на сортувальне депо (маршрут {sender_city} > сортувальний центр)")
# сортування (може бути затримка або помилка)
if weight_kg > 20:
log_info(f"посилка #{parcel_id} потрапила в категорію великогабаритних — додатковий контроль")
# етап 3 — маршрут доставки до міста отримувача
log_info(f"посилку #{parcel_id} відправлено маршрутом сортувальний центр > {receiver_city}")
# етап 4 — прибуття у відділення отримувача
log_info(f"посилка #{parcel_id} прибула у відділення {receiver_city}")
# фінальний етап — видача клієнту
log_info(f"посилку #{parcel_id} видано отримувачу. доставка завершена успішно")
return True
#####################################################################################################################
print("обробкa двох посилок:\n")
# успішна посилка
success = process_parcel(
parcel_id="NP-784512",
sender_city="Київ",
receiver_city="Одеса",
weight_kg=4.7
)
print("\n")
# посилка з проблемою (перевищення ваги)
failed = process_parcel(
parcel_id="NP-987654",
sender_city="Львів",
receiver_city="Харків",
weight_kg=38.2
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment