Python štýl pre zápis programov

Detailnejšie na stránke: PEP 8 – Style Guide for Python Code


  1. dĺžka riadkov je do 79 znakov

    • dlhšie riadky treba rozdeliť do viacerých

    • ak sa dá, môžu sa niektoré výrazy uzavrieť do zátvoriek, napríklad:

      if (príliš_dlhý_test,
            ktorý takto môže prechádzať
            aj cez viac riadkov):
          print('niečo')
      
    • parametre funkcií, alebo napríklad aj zoznamy môžu prechádzať aj cez viac riadkov:

      funkcia(prvy_parameter,
              druhy_parameter,
              treti_parameter)
      zoznam = [[1, 2],
                [3, 4],
                [5, 6],
               ]
      

  1. príkaz import

    • príkazy import musia byť všetky úplne na začiatku súboru

    • každý import na samostatnom riadku

    • nepoužívať from modul import * pre importovanie všetkého, namiesto toho vymenovať:

      from math import pi, sin, cos, radians
      

  1. prázdne riadky

    • oddeľovanie navzájom funkcií, resp. metód

    • oddeľovanie definícií tried

    • možno aj logické časti vo vnútri funkcií


  1. program je vždy uložený v kódovaní UTF-8

    • na identifikátory nepoužívať iné písmená ako anglickú abecedu (bez diakritiky)


  1. medzery

    • nevkladať za ľavú a pred pravú zátvorku

    • nevkladať medzi meno funkcie a ľavú okrúhlu zátvorku, resp. zoznam a hranatú zátvorku

    • nevkladať pred čiarku a dvojbodku

      Nie:
        x = funk ( 1 , z [ 2 ] )
        tup = (1, )
      Ano:
        x = funk(1, z[2])
        tup = (1,)
      
    • dvojbodka v rezoch môže mať medzeru pred a potom musí byť aj za:

      Nie:
        zoz[lower + pocet:horny + pocet]
        zoz[1: 9], zoz[1 :9], zoz[1:9 :3]
        zoz[dolny : : horny]
        zoz[ : horny]
      Ano:
        zoz[lower+pocet : horny+pocet]
        zoz[lower + pocet : horny + pocet]
        zoz[1:9], zoz[1:9:3]
        zoz[dolny::horny], zoz[dolny :: horny]
        zoz[:horny]
      
    • tieto operátory musia mať medzeru pred aj za:

      +=, -=, *=, ...
      ==, !=, <, <=, >, >=
      in, not in, is, is not
      and, or, not
      
    • znak priradenia = mimo pomenovaného parametra musí mať medzeru pred aj za

    • pri pomenovaných parametroch sa medzery nevkladajú:

      Nie:
        print('nieco', end = '')
        x=77
      Ano:
        print('nieco', end='')
        x = 77
      
    • operácie sa väčšinou oddeľujú od operandov medzerami, výnimkou sú výrazy, v ktorých sú operácie s rôznymi prioritami a potrebujeme zvýrazniť ten podvýraz, ktorý sa bude vyhodnocovať skôr:

      Nie:
        i=i+1
        pocet +=1
        x = x * 2 - 1
        vzd2 = x * x + y * y
        c = (a + b) * (a - b)
      Ano:
        i = i + 1
        pocet += 1
        x = x*2 - 1
        vzd2 = x*x + y*y
        c = (a+b) * (a-b)
      

  1. pomenovávanie

    • mená tried vždy začínajú veľkým písmenom, nepoužívajú sa podčiarkovníky, ale na zvýraznenie čitateľnosti sa ďalšie slová môžu začínať veľkým písmenom, napríklad

      Nie:
        class Velke_cisla: pass
        class student_Bez_Ubytovania: pass
      Ano:
        class VelkeCisla: pass
        class StudentBezUbytovania: pass
      
    • mená funkcií, metód, premenných a parametrov obsahujú len malé písmená, číslice a podčiarkovníky na oddelenie slov pre čitateľnosť, podčiarkovník na začiatku alebo na konci mena má často v Pythone iný význam (budeme ich používať len v tých špeciálnych prípadoch), napríklad

      Nie:
        pocetCervenych += 1
        def KopiaSposunom(Param1, _param2, param_3_): pass
      Ano:
        pocet_cervenych += 1
        def kopia_s_posunom(param1, param2, param_3): pass
      
    • mená magických metód (aj premenných) začínajú aj končia dvoma podčiarkovníkmi, nebudeme ich používať na iné účely

    • meno atribútu (premennej alebo metódy), ktoré začína jedným podčiarkovníkom vyjadruje, že toto meno nie je verejné a nemalo by sa používať mimo metód samotnej triedy

    • prvý parameter v metódach má vždy meno self


  1. ďalšie rady

    • porovnávanie na rovnosť, nerovnosť s hodnotou None vždy pomocou is alebo not is

      Nie:
        if vysl != None: ...
        while not podm is None: ...
        test = res == None
      Ano:
        if vysl is not None: ...
        while podm is not None: ...
        test = res is None
      
    • neporovnávať logickú hodnotu na True alebo False

      Nie:
        if vysledok == True: ...
        if vysledok is True: ...
      Ano:
        if vysledok: ...
      
    • na formátovanie znakového reťazca používať f'...{}...' alebo '...{}...'.format(...)

      Nie:
        print('vysledok = (' + str(x) + ',' + str(y) + ')')
      Ano:
        print(f'vysledok = ({x},{y})')
        print('vysledok = ({},{})'.format(x, y))
      
    • nepoužívať žiadne globálne premenné v definícií tried - všetko treba riešiť parametrami a atribútmi:

      Nie:
        class Test:
            def metoda(self):
                canvas.create_text(...)
        canvas = tkinter.Canvas()
      Ano:
        class Test:
            canvas = None
            def metoda(self):
                self.canvas.create_text(...)
        Test.canvas = tkinter.Canvas()
      
    • globálne premenné vo funkciách používať veľmi obozretne, vyhýbať sa global

    • náhradné hodnoty pomenovaných parametrov nikdy (sú výnimky) nedávať mutable typov (zoznam, slovník, množina), napríklad:

      Nie:
        def funkcia(x, zoz=[]):
            zoz.append(x)
            ...
      Ano:
        def funkcia(x, zoz=None):
            if zoz is None:
                zoz = []
            zoz.append(x)
            ...