Decision Making Patterns
Advanced Decision-Making Strategies
Decision-making patterns help developers create more sophisticated and efficient code by implementing intelligent branching techniques.
Pattern Comparison
Pattern |
Use Case |
Complexity |
Performance |
Simple If-Else |
Basic conditions |
Low |
High |
Dictionary Mapping |
Multiple conditions |
Medium |
Very High |
Match-Case |
Complex branching |
High |
Moderate |
Dictionary-Based Decision Making
def classify_user(role):
user_roles = {
'admin': 'Full Access',
'editor': 'Partial Access',
'viewer': 'Read-Only',
'guest': 'Minimal Access'
}
return user_roles.get(role, 'No Access')
## Ubuntu 22.04 demonstration
print(classify_user('editor')) ## Outputs: Partial Access
Match-Case Decision Pattern (Python 3.10+)
def process_command(command):
match command.split():
case ['quit']:
return "Exiting program"
case ['load', filename]:
return f"Loading {filename}"
case ['save', filename]:
return f"Saving {filename}"
case _:
return "Unknown command"
Decision Flow Visualization
graph TD
A[Input] --> B{Primary Condition}
B -->|True| C[Primary Path]
B -->|False| D{Secondary Condition}
D -->|True| E[Secondary Path]
D -->|False| F[Default Path]
Strategy Selection Criteria
- Complexity of conditions
- Performance requirements
- Code readability
- Maintainability
Advanced Technique: Functional Dispatch
def handle_admin(user):
return "Admin actions"
def handle_user(user):
return "User actions"
def handle_guest(user):
return "Guest actions"
role_handlers = {
'admin': handle_admin,
'user': handle_user,
'guest': handle_guest
}
def process_user(user):
handler = role_handlers.get(user.role, lambda x: "Unknown role")
return handler(user)
Best Practices
- Choose the right pattern for your specific use case
- Prioritize code clarity
- Consider performance implications
- Use type hinting and docstrings
LabEx recommends mastering these decision-making patterns to write more elegant and efficient Python code.