Izkaz donosa se uporablja za definiranje generatorjev v Pythonu. Preden se lotimo tega, kaj točno prinaša, moramo najprej razumeti koncept generatorjev. Generatorji imajo pomembno vlogo v Pythonu in če ste globoko v programiranju Pythona, obstaja velika verjetnost, da ste že delali s Python generatorji. Generatorji se uporabljajo za ustvarjanje iteratorjev v Pythonu, vendar z drugačnim pristopom.
Generatorji Python so funkcije, ki ustvarijo zaporedje rezultatov in jih lahko dinamično zaustavijo in nadaljujejo. Generatorji so bili najprej dodani kot dodatna funkcija v Python-u 2.2 in so postali standardni v Python-u 2.3. Čeprav so bili dovolj zmogljivi, so funkcije generatorjev v Python 2.5 bistveno izboljšali.
Ko smo generatorje dodali nazaj v Python 2.2, je uvedel novo ključno besedo "donos" za nazaj združljivost, za kar smo morali uporabiti uvoznike generatorjev iz modula _future_, da jih lahko uporabimo. To je bilo spremenjeno v različici Python 2.3, ko so generatorji postali standardni in niso bili več potrebni.
Izkaz donosa zaustavi izvajanje funkcije in pošlje vrednost nazaj klicatelju, hkrati pa shrani stanje in kasneje nadaljuje, kar pomeni, da se lahko celoten generator še naprej nadaljuje po pridobitvi povratne vrednosti. Izjava o vrnitvi konča izvedbo funkcije in klicatelju pošlje vrednost nazaj. Brez tega vaša funkcija ne vrne ničesar. Oglejmo si, kdaj uporabiti donos in kdaj uporabiti return v Pythonu, da bolje razumemo razliko med obema.
Izjava o donosu se uporablja v generatorjih Python-a za nadomestitev vrnitve funkcije za pošiljanje vrednosti klicatelju brez uničenja lokalnih spremenljivk. Če želite bolje razumeti, kakšno vlogo ima izjava o donosu v programiranju Python, morate razumeti, kaj so generatorji.
Funkcije generatorja so po definiciji izdelane tako kot običajne funkcije, vendar vsebujejo stavek donosa. Začne se s ključno besedo "donosi", ki določa, da se bo generatorski predmet vrnil klicatelju. Generator je posebna funkcija v Pythonu, ki vrne objekt generatorja klicatelju in ne podatkovni vrednosti. Ključna beseda donos ima edinstveno sposobnost ustavitve izvajanja funkcije, shranjevanja stanja in poznejšega nadaljevanja.
Izjava o vračanju, za razliko od izjave o donosu, izstopi iz funkcije in vrne vrednost svojemu klicatelju. Funkcije vrnejo vrednost svojim klicateljem in tiste, ki so bolj proceduralne narave, izrecno ne vrnejo ničesar. Medtem ko ima lahko funkcija več izjav o vračanju, lahko za kateri koli klic funkcije kličemo le enega od njih.
Ponavadi se izjava na povratku pojavi na samem koncu funkcijskega bloka, da vrne končni rezultat izvajanja vseh stavkov v tej funkciji. Vendar se lahko v funkcijskem bloku pojavi tudi prej, da ustavi izvrševanje vseh naslednjih stavkov v tem bloku. S tem se takoj začne izvedba programa pri klicatelju. Če ni podana nobena vrednost, je enakovredna vrsta vrnjenega predmeta v Pythonu "None".
Sintaktično je donos ključna beseda, ki jo je mogoče uporabiti tako kot ključno besedo vrnitev, razen, če stavek return vrne funkcijo in vrne vrednost svojemu klicatelju. Funkcionalnost izjave o vračanju je, da sprejme vnose in nekaj vrne klicatelju. Za razliko od donosa se izjava o donosu izrecno uporablja za definiranje generatorjev in nadomešča vrnitev vrednosti funkcije za zaustavitev njene izvedbe, pri čemer ostanejo lokalne spremenljivke nedotaknjene, medtem ko stavek vračanja uniči vse lokalne spremenljivke znotraj.