Při tvorbě softwaru se málokdy stává, že napíšete kompletní kód naráz a až pak ho spustíte. Obvykle postupujete tak, že napíšete kousek kódu, otestujete ho, přidáte další část a tento proces opakujete, dokud není program hotový.
Efektivním způsobem, jak zvládnout vývoj programu, je rozdělit ho na menší, zvládnutelné části. Začnete s důležitými komponentami, ostatní vynecháte a postupně se k nim vracíte. Pro efektivní práci v Pythonu je klíčové umět používat příkaz `pass`, kterému se budeme v tomto článku věnovat.
Co je to příkaz „pass“?
Na rozdíl od většiny klíčových slov, které interpretu Pythonu říkají, co má dělat, je `pass` jedinečný v tom, že mu říká, aby nedělal nic. Používá se uvnitř bloků kódu.
Bloky v Pythonu jsou skupiny řádků kódu, které jsou odsazené pod definicemi funkcí, tříd nebo příkazy pro řízení toku programu. Příkazy pro řízení toku programu mění normální sekvenční provádění programu shora dolů, buď přeskočením části kódu pomocí podmínek, nebo opakováním části kódu pomocí smyček. Mezi běžná klíčová slova pro řízení toku v Pythonu patří `if`, `for` a `while`.
Proč potřebujeme příkaz „pass“?
Jak už bylo zmíněno, `pass` je příkaz, který nedělá nic. Proč bychom ale potřebovali příkaz, který nic nedělá, když vytváříme program, který má něco dělat? V této části se podíváme na to, kdy se příkaz `pass` hodí.
#1. Zástupný symbol pro budoucí implementaci
Jak už bylo uvedeno v úvodu, při psaní kódu je výhodné aplikovat strategii rozděl a panuj. Například, pokud začínáte s funkcí, můžete nejprve definovat její hlavičku a implementaci odložit na později.
Nicméně, interpret Pythonu bude hlásit chybu, pokud se pokusíte spustit kód s prázdným blokem. Python totiž vyžaduje, aby každý blok kódu obsahoval alespoň jeden příkaz. Zde je příklad funkce, kterou můžeme napsat:
def my_function(): # Kód doplníme později # Zatím zde nejsou žádné příkazy
Pokud se pokusíme spustit tento kód, dostaneme chybu syntaxe:
File "<ipython-input-1-58189b01193e>", line 3 # Zatím zde nejsou žádné příkazy ^ SyntaxError: incomplete input
Naše strategie rozděl a panuj by tedy nefungovala, pokud bychom museli vše psát dopředu, ale Python vyžaduje, abychom napsali alespoň něco. V tomto momentě přichází na scénu příkaz `pass`. Technicky vzato je to příkaz, a proto, když ho vložíte do bloku, Python nebude protestovat. A přesto nic nedělá, takže se nemusíte starat o logiku funkce. Tady je ta samá funkce s příkazem `pass`:
def my_function(): # Kód doplníme později # Zatím máme pouze příkaz pass pass
Nyní, když spustíme tento kód, nedostaneme žádnou chybu.
Funkci také můžete zavolat, abyste se ujistili, že skutečně nic nedělá.
Toto je základní použití příkazu `pass` v Pythonu – jako zástupný symbol pro prázdné bloky kódu. A nemusí se jednat jen o funkce, ale funguje také s podmínkami, smyčkami a třídami.
#2. Implementace abstraktních tříd a rozhraní
Příkaz `pass` lze použít i pro implementaci abstraktních tříd. Abstraktní třída je třída, která implementuje abstraktní metody, a abstraktní metoda je metoda, která je definovaná, ale není implementovaná. Je to podobné jako v předchozím případě, kdy jsme použili `pass` jako zástupný symbol. Rozdíl je v tom, že v tomto případě je `pass` trvalé, nikoli dočasné.
Abstraktní třídy jsou základní třídy, které definují metody, které by měly podtřídy zděděné od nich implementovat. Abstraktní třídy neimplementují žádnou logiku, ale definují metody, které mají být součástí tříd, které od nich dědí. Proto nevytváříte přímo instanci základní třídy.
Pro vytvoření abstraktních tříd v Pythonu se používá dekorátor `@abstractmethod` a třída `ABC` definovaná v modulu `abc`. Pokud dekorátory neznáte, nebo jste je zapomněli, najdete si o nich článek.
Jak už bylo zmíněno, modul `abc` definuje dekorátor `@abstractmethod` a třídu `ABC`. Ukážeme si jejich použití:
from abc import (abstractmethod, ABC) class BasicClass(ABC): @abstractmethod def basic_method(self): # basic_method je metoda, kterou by měla implementovat každá podtřída BasicClass # Proto ji zde pouze definujeme, ale neimplementujeme # Použijeme příkaz pass, aby kód byl platný pass
`BasicClass` dědí od třídy `ABC`. Kromě toho má metoda `basic_method` dekorátor `@abstractmethod`. Nyní můžete od této třídy dědit a implementovat metodu `basic_method`.
class DerivedClass(BasicClass): def basic_method(self): print("Volání metody basic_method z DerivedClass")
Poté můžete vytvořit instanci této třídy a otestovat `basic_method`.
my_object = DerivedClass() my_object.basic_method()
Po spuštění tohoto kódu by se měla na obrazovce zobrazit hláška.
Volání metody basic_method z DerivedClass
#3. Ignorování zachycených výjimek
Když program v Pythonu narazí na chybu, vyvolá výjimku. Výjimky mohou narušit běh programu, způsobit jeho pád a zastavení provádění. Můžete však zachytit výjimky a zpracovat je, aby program nespadl. Příkaz `pass` můžete použít, pokud nechcete s chybou nic konkrétního dělat. Zde je příklad:
try: # Kód, který zaručeně vyvolá výjimku raise Exception('Nějaká výjimka') except: pass
Pokud spustíte uvedený kód, nic se nestane. Důvodem je, že výjimka je vyvolána a zpracována blokem `except`. Kód v tomto bloku ale nic nedělá. Obvykle, když zachytáváte výjimky, chcete je nějakým způsobem zaznamenat nebo je řešit. Pokud však nechcete dělat nic, můžete použít `pass`.
Jak se příkaz „pass“ liší od „break“ a „continue“?
Další klíčová slova, se kterými se můžete setkat, jsou `break` a `continue`. Stručně vysvětlíme, co dělají, abyste viděli, jak se liší od příkazu `pass`.
Příkaz „break“
Příkaz `break` se používá pro opuštění smyčky. Jakékoli další iterace smyčky jsou poté zrušeny. Představte si například, že píšete funkci pro lineární vyhledávání. Pokud se prvek najde, není nutné pokračovat v iteraci až do konce seznamu. Bylo by vhodné opustit smyčku. V takovém případě byste použili příkaz `break`. Zde je příklad funkce lineárního vyhledávání:
def linear_search(values, search_value): for i in range(len(values)): if values[i] == search_value: print("Hodnota nalezena na indexu", i) break
Příkaz „continue“
Příkaz `continue` se používá k přeskočení aktuální iterace ve smyčce. Pokud iterujete seznamem čísel a program narazí na příkaz `continue`, zastaví aktuální iteraci a přeskočí na další iteraci. Smyčka pokračuje v běhu. Následuje příklad funkce, která používá příkaz `continue`. Program zdvojnásobí všechna lichá čísla, takže seznam bude obsahovat pouze sudá čísla.
def make_even(nums): for i in range(len(nums)): if nums[i] % 2 == 0: # Pokud je číslo sudé, přeskočíme na další iteraci pomocí continue continue # Sem se dostanou pouze lichá čísla # Zdvojnásobíme číslo, aby se stalo sudým nums[i] *= 2
Doufáme, že vám pochopení příkazů `break` a `continue` pomohlo odlišit je od příkazu `pass`.
Doporučené postupy pro používání příkazu „pass“
✅ Nezapomeňte, že příkaz `pass` se běžně používá jako dočasný zástupný symbol; až budete připraveni, nezapomeňte jej nahradit skutečným kódem.
✅ Pokud používáte příkaz `pass` pro jiný účel než jako dočasný zástupný symbol, přidejte komentář, který vysvětlí, proč je tam.
Závěrečná slova
V tomto článku jsme si vysvětlili příkaz `pass` v Pythonu, což je užitečné klíčové slovo, které vám umožňuje při psaní kódu dělit a panovat. Příkaz `pass` je také popsán v dokumentaci Pythonu.
Podívejte se také na běžné typy chyb v Pythonu a jak je řešit.