Konvence nejsou pravidla jazyka. Kód poběží, i když je porušíte. Dodržují se proto, aby ho dokázal přečíst i někdo jiný (a vy za měsíc). Oficiální doporučení se jmenuje PEP 8, tohle je jeho zkrácená verze.

Pojmenování

# špatně
X = 21
def Vypocet(d, s):
    return d * (1 + s / 100)
class smluvni_strana:
    pass

# dobře
SAZBA_DPH = 21


def pridej_dph(cena, sazba):
    return cena * (1 + sazba / 100)


class SmluvniStrana:
    pass

Mezery

# špatně
cena=nacti_cenu( soubor,sazba = 21 )
slovnik = { "a":1 , "b":2 }

# dobře
cena = nacti_cenu(soubor, sazba=21)
slovnik = {"a": 1, "b": 2}

Nové řádky

# špatně
if cena > 1000: sleva = 0.1
else: sleva = 0
vysledek = spocitej(cena, sleva, zakaznik, datum, mena, zaokrouhlit=True, dph=21, poznamka="")

# dobře
if cena > 1000:
    sleva = 0.1
else:
    sleva = 0

vysledek = spocitej(
    cena,
    sleva,
    zakaznik,
    datum,
    mena,
    zaokrouhlit=True,
    dph=21,
    poznamka="",
)

Komentáře

# špatně: komentář jen opakuje kód
cena = cena * 1.21  # vynásobí cenu 1.21

# dobře: komentář říká, co kód neříká
cena = cena * 1.21  # základní sazba DPH v ČR je 21 %
# špatně
def f(c):
    return c * 1.21

# dobře
def pridej_dph(cena: float) -> float:
    """Vrátí cenu navýšenou o základní sazbu DPH."""
    return cena * 1.21

Struktura souboru

# špatně
import os, json
def nacti(cesta):
    import csv
    ...

# dobře
import csv
import json
import os

import pandas

from moje_pomucky import vycisti_text


def nacti(cesta):
    ...
# špatně: jedna funkce dělá všechno
def zpracuj(cesta):
    text = open(cesta).read()
    text = text.lower().strip()
    pocet = text.count("smlouva")
    print(f"Nalezeno: {pocet}")

# dobře: každá funkce jednu věc
def nacti_text(cesta: str) -> str:
    return open(cesta).read()


def vycisti(text: str) -> str:
    return text.lower().strip()


def spocitej_vyskyty(text: str, slovo: str) -> int:
    return text.count(slovo)

Dobré zvyky

# špatně
def secti(a, b):
    return a + b
zprava = "Celkem: " + str(cena) + " Kč"
if zakaznik == None:
    ...
# stara_cena = cena * 1.2
# print(stara_cena)

# dobře
def secti(a: int, b: int) -> int:
    return a + b


zprava = f"Celkem: {cena} Kč"
if zakaznik is None:
    ...

Nástroje

Nemusíte si to všechno pamatovat. Nástroj Ruff kód zkontroluje a naformátuje za vás, stačí ho spustit:

ruff format soubor.py
ruff check soubor.py