Skip to content

PEP8 (Python)

Owner: Daniel Vítek Tags: designpatterns, python

PEP 8 je oficiální stylový průvodce pro psaní Python kódu. Název pochází z „Python Enhancement Proposal 8“. Je to soubor doporučení, který má zajistit, aby byl Python kód čitelný, konzistentní a snadno udržovatelný. Není to povinné, ale většina Python komunity ho dodržuje.

Hlavní body PEP 8 zahrnují:

  1. Odsazování a mezery
    • Používat 4 mezery pro odsazení (nikoliv tabulátor).
    • Mezery kolem operátorů: x = y + z (správně), x=y+z (méně čitelné).
  2. Maximální délka řádku
    • Doporučeno 79 znaků pro běžný kód a 72 znaků pro komentáře a dokumentační řetězce.
  3. Pojmenování
    • Funkce a proměnné: snake_case (my_variable, calculate_sum)
    • Třídy: CamelCase (MyClass, DataProcessor)
    • Konstanty: ALL_CAPS (MAX_COUNT, DEFAULT_TIMEOUT)
  4. Prázdné řádky
    • Oddělovat funkce a třídy dvěma prázdnými řádky.
    • Metody uvnitř třídy oddělovat jedním prázdným řádkem.
  5. Importy
    • Každý import na nový řádek.
    • Importy uspořádat ve třech blocích: standardní knihovny, externí knihovny, lokální moduly.
  6. Komentáře a docstringy
    • Komentáře mají vysvětlovat proč něco děláme, ne jen co děláme.
    • Používat triple quotes pro dokumentační řetězce funkcí a tříd.
  7. Další doporučení
    • Vyhnout se více než jedné instrukci na řádku.
    • Preferovat čitelnost před „hezkými“ zkratkami.

Příklad

Původní kód (špatně podle PEP 8)

def addNumbers(a,b): return a+b
def printresult(x,y):print("Result:",addNumbers(x,y))
printresult(5,10)

Problémy:

  • Funkce a proměnné nejsou v snake_case.
  • Chybí mezery kolem operátorů.
  • Funkce na jednom řádku (return a+b) je méně čitelná.
  • print uvnitř funkce bez odsazení a s mezerou.

Upravený kód (dle PEP 8)

def add_numbers(a, b):
    """Vrátí součet dvou čísel."""
    return a + b

def print_result(x, y):
    """Vytiskne výsledek součtu dvou čísel."""
    print("Result:", add_numbers(x, y))

print_result(5, 10)

Zlepšení:

  • Funkce a proměnné používají snake_case.
  • Mezera kolem operátorů.
  • Funkce mají docstringy.
  • Každá instrukce na vlastním řádku, kód je přehlednější.