Created
February 13, 2026 11:26
-
-
Save sunmeat/110c9a20c66f3cd0adcb8464c1426ffd to your computer and use it in GitHub Desktop.
приклад на замикання в пайтон
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # фабрика логерів з ізольованим станом для відстеження статусів | |
| 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