# Clean Functions

> Use when writing, fixing, editing, or refactoring Python functions. Enforces Clean Code principles—maximum 3 arguments, single responsibility, no flag parameters.

- Skill: `ertugrul-dmr/clean-functions` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ertugrul-dmr/clean-functions`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ertugrul-dmr/clean-functions/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: ertugrul-dmr (https://skillmd.com/u/ertugrul-dmr)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/ertugrul-dmr/clean-functions

---


# Clean Functions

## F1: Too Many Arguments (Maximum 3)

```python
# Bad - too many parameters
def create_user(name, email, age, country, timezone, language, newsletter):
    ...

# Good - use a dataclass or dict
@dataclass
class UserData:
    name: str
    email: str
    age: int
    country: str
    timezone: str
    language: str
    newsletter: bool

def create_user(data: UserData):
    ...
```

More than 3 arguments means your function is doing too much or needs 
a data structure.

## F2: No Output Arguments

Don't modify arguments as side effects. Return values instead.

```python
# Bad - modifies argument
def append_footer(report: Report) -> None:
    report.append("\n---\nGenerated by System")

# Good - returns new value
def with_footer(report: Report) -> Report:
    return report + "\n---\nGenerated by System"
```

## F3: No Flag Arguments

Boolean flags mean your function does at least two things.

```python
# Bad - function does two different things
def render(is_test: bool):
    if is_test:
        render_test_page()
    else:
        render_production_page()

# Good - split into two functions
def render_test_page(): ...
def render_production_page(): ...
```

## F4: Delete Dead Functions

If it's not called, delete it. No "just in case" code. Git preserves history.

