Python štýl pre zápis programov¶
Detailnejšie na stránke: PEP 8 – Style Guide for Python Code
dĺžka riadkov je maximálne 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], ]
príkaz import
príkazy
import
musia byť všetky úplne na začiatku súborukaždý
import
na samostatnom riadkunepoužívať
from modul import *
pre importovanie všetkého, namiesto toho môžeš vymenovať:from math import pi, sin, cos, radians
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í
program je vždy uložený v kódovaní UTF-8
na identifikátory nepoužívať iné písmená ako anglickú abecedu (bez diakritiky)
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 zapri 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)
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
ďalšie rady
porovnávanie na rovnosť, nerovnosť s hodnotou
None
vždy pomocouis
alebonot 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
aleboFalse
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) ...