A boolean flag argument is a code smell — it means the function does two things.
# dirty
def create_user(name, is_admin):
if is_admin:
return {'name': name, 'role': 'admin', 'permissions': ['read', 'write', 'delete']}
return {'name': name, 'role': 'user', 'permissions': ['read']}Split this into two functions: create_user(name) and create_admin_user(name). Then solve(name, kind) dispatches to the right one — no boolean flag.
solve('Alice', 'create_user') → {'name': 'Alice', 'role': 'user', 'permissions': ['read']}solve('Bob', 'create_admin_user') → {'name': 'Bob', 'role': 'admin', 'permissions': ['read', 'write', 'delete']}
Sample tests