# Python Coding Standards (PEP 8)

PEP 8 is the style guide for Python code. It provides guidelines and best practices on how to write Python code to maximize readability and consistency.

## Indentation

*   Use **4 spaces** per indentation level.
*   Do not use tabs.

```python
# Correct:
def long_function_name(
        var_one, var_two, var_three,
        var_four):
    print(var_one)

# Wrong:
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
```

## Maximum Line Length

*   Limit all lines to a maximum of **79 characters**.
*   For flowing long blocks of text with fewer structural restrictions (docstrings or comments), the line length should be limited to 72 characters.

## Blank Lines

*   Surround top-level function and class definitions with **two blank lines**.
*   Method definitions inside a class are surrounded by a single blank line.

```python
class MyClass:
    def first_method(self):
        return None

    def second_method(self):
        return None
```

## Imports

*   Imports should usually be on separate lines.
*   Imports are always put at the top of the file, just after any module comments and docstrings, and before module globals and constants.

**Order of Imports:**
1.  Standard library imports.
2.  Related third-party imports.
3.  Local application/library specific imports.

```python
import os
import sys

from flask import Flask

import my_local_module
```

## Whitespace in Expressions and Statements

*   Avoid extraneous whitespace inside parentheses, brackets, or braces.

```python
# Correct:
spam(ham[1], {eggs: 2})

# Wrong:
spam( ham[ 1 ], { eggs: 2 } )
```

*   Always surround these binary operators with a single space on either side: assignment (`=`), augmented assignment (`+=`, `-=` etc.), comparisons (`==`, `<`, `>`, `!=`, `<=`, `>=`, `in`, `not in`, `is`, `is not`), Booleans (`and`, `or`, `not`).

## Naming Conventions

*   **Variables and Functions**: `snake_case` (lowercase with underscores).
*   **Classes**: `CapWords` (CamelCase).
*   **Constants**: `ALL_CAPS` (uppercase with underscores).
*   **Private Members**: `_single_leading_underscore` (internal use) or `__double_leading_underscore` (name mangling).

[[programming/python/python]]