EasyPython

Avoid Flag Arguments

PythonClean CodeFunctionsRefactoring

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

Test #1create_user returns user role with read permission
Input: ["Alice","create_user"]
Output: {"name":"Alice","role":"user","permissions":["read"]}
Test #2create_admin_user returns admin role with full permissions
Input: ["Bob","create_admin_user"]
Output: {"name":"Bob","role":"admin","permissions":["read","write","delete"]}
Test #3Works with empty name string
Input: ["","create_user"]
Output: {"name":"","role":"user","permissions":["read"]}