What Are Python Context Managers?
Context managers manage the setup and teardown of resources, ensuring they are properly handled even if errors occur. They are commonly used with the with statement.
Why Use Context Managers?
- Automatic Resource Management: Ensure resources like lists or dictionaries are handled correctly.
- Error Handling: Guarantee cleanup actions are performed even when exceptions arise.
- Cleaner Code: Reduce boilerplate code for resource management.
How to Use Context Managers?
Syntax of a Custom Context Manager Using contextlib
from contextlib import contextmanager
@contextmanager
def my_context_manager():
# Setup code
try:
yield
finally:
# Teardown codeManaging Festival Resources with enumerate
# Use a context manager to allocate festival resources and track them with enumeration.
from contextlib import contextmanager
@contextmanager
def manage_festival_resources(resources):
print("Allocating festival resources:")
for idx, resource in enumerate(resources, start=1):
print(f"{idx}. {resource}")
try:
yield
finally:
print("Releasing festival resources.")
resources = ["Stage Setup", "Lighting", "Sound System", "Decorations"]
with manage_festival_resources(resources):
print("Festival resources are now in use.")
"""
Expected Output:
Allocating festival resources:
1. Stage Setup
2. Lighting
3. Sound System
4. Decorations
Festival resources are now in use.
Releasing festival resources.
"""Managing Festival Budgets with zip
# Pair budget items with their amounts using a context manager.
from contextlib import contextmanager
@contextmanager
def manage_festival_budget(items, amounts):
budget = {}
print("Allocating festival budget:")
for item, amount in zip(items, amounts):
budget[item] = amount
print(f"- {item}: PHP {amount}")
try:
yield budget
finally:
print("Finalizing festival budget:")
for item, amount in budget.items():
print(f"- {item}: PHP {amount}")
budget_items = ["Stage Setup", "Lighting", "Sound System", "Decorations"]
budget_amounts = [5000, 3000, 4000, 2000]
with manage_festival_budget(budget_items, budget_amounts) as budget:
print("Festival budget has been allocated successfully.")
"""
Expected Output:
Allocating festival budget:
- Stage Setup: PHP 5000
- Lighting: PHP 3000
- Sound System: PHP 4000
- Decorations: PHP 2000
Festival budget has been allocated successfully.
Finalizing festival budget:
- Stage Setup: PHP 5000
- Lighting: PHP 3000
- Sound System: PHP 4000
- Decorations: PHP 2000
"""

