Příkaz výnos se používá k definování generátorů v Pythonu. Takže než se dostaneme do toho, co přesně přináší výnos, musíme nejprve pochopit pojem generátorů. Generátory mají v Pythonu významnou roli a pokud jste v hlubokém programování v Pythonu, je pravděpodobné, že jste již spolupracovali s generátory Python. Generátory se používají k vytváření iterátorů v Pythonu, ale s odlišným přístupem.
Generátory Pythonu jsou funkce, které vytvářejí sled výsledků a lze je dynamicky pozastavit a obnovit. Generátory byly nejprve přidány jako volitelná funkce v Pythonu 2.2 a byly standardem v Pythonu 2.3. Přestože byly dostatečně výkonné, funkce generátorů byly v Pythonu 2.5 výrazně vylepšeny.
Když byly generátory přidány zpět do Pythonu 2.2, zavedlo nové klíčové slovo „výnos“ pro zpětnou kompatibilitu, pro které jsme potřebovali importovat generátory z modulu _future_, abychom je mohli použít. To se změnilo v Pythonu verze 2.3, když se generátory staly standardem a už to nebylo nutné.
Příkaz výnosu pozastaví vykonávání funkce a odešle hodnotu zpět volajícímu, zatímco stav úspory a pozdější obnovení znamená, že celý generátor může být znovu obnoven po získání návratové hodnoty. Návratový příkaz ukončí provedení funkce a odešle volajícímu hodnotu zpět. Bez něj vaše funkce nevrací nic. Pojďme se dobře podívat, kdy použít výnos a kdy použít návrat v Pythonu, abychom lépe porozuměli rozdílu mezi těmito dvěma.
Příkaz výnos se používá v generátorech Pythonu jako náhrada za návrat funkce k odeslání hodnoty zpět volajícímu, aniž by došlo ke zničení místních proměnných. Abyste lépe porozuměli, jakou roli hraje prohlášení o výnosu v programování v Pythonu, musíte pochopit, jaké jsou generátory.
Funkce generátoru jsou definovány jako běžné funkce, ale obsahují příkaz „výnos“. Toto začíná klíčovým slovem „výnos“, které určuje objekt generátoru, který má být vrácen volajícímu. Generátor je speciální funkce v Pythonu, která vrací objekt generátoru volajícímu namísto datové hodnoty. Klíčové slovo výnos má jedinečnou schopnost zastavit provádění funkce, uložit stav a později obnovit.
Návratový příkaz, na rozdíl od výnosového příkazu, opouští funkci a předává hodnotu volajícímu. Funkce vrátí hodnotu zpět jejich volajícím a ty, které jsou procedurálnějšího charakteru, nic výslovně nevracejí. Zatímco funkce může mít více návratových příkazů, pouze jeden z nich může být vyvolán pro jakékoli dané vyvolání funkce.
Příkaz return se obvykle objeví na samém konci funkčního bloku a vrací konečný výsledek provádění všech příkazů obsažených v této funkci. Může se však také objevit dříve ve funkčním bloku, aby zastavil provádění všech následných příkazů v tomto bloku. Tím se okamžitě obnoví provádění programu u volajícího. Pokud není zadána žádná hodnota, ekvivalentním typem návratového objektu v Pythonu je „Žádný“.
Syntakticky je výnos klíčové slovo, které lze použít stejně jako návratové klíčové slovo, s výjimkou příkazu return, který ukončí provádění vaší funkce a odešle zpět volajícímu hodnotu. Funkcí příkazu return je převzít vstupy a něco vrátit volajícímu. Na rozdíl od návratu se příkaz výnosu explicitně používá k definování generátorů, nahrazením návratové hodnoty funkce se pozastavuje její provádění, přičemž lokální proměnné zůstávají nedotčeny, zatímco příkaz návrat ničí všechny místní proměnné uvnitř.