Izjava o prinosu koristi se za definiranje generatora u Pythonu. Dakle, prije nego što uđemo u ono što tačno donosi, prvo moramo razumjeti koncept generatora. Generatori imaju značajnu ulogu u Pythonu i ako ste duboko u Python programiranju, vjerojatno ste već radili s Python generatorima. Generatori se koriste za stvaranje iteratora u Pythonu, ali s drugačijim pristupom.
Python Generatori su funkcije koje proizvode niz rezultata i mogu se dinamički pauzirati i ponovo pokrenuti. Generatori su prvi put dodani kao dodatna značajka u Python 2.2 i postali su standardni u Python 2.3. Iako su bili dovoljno snažni, funkcije generatora su značajno poboljšane u Python 2.5.
Kad su nam generatori dodani u Python 2.2, uvela je novu ključnu riječ "prinos" za kompatibilnost s nazad, za koju smo morali uvesti generatore iz modula _future_ da bismo ih koristili. To je promijenjeno u verziji Python 2.3 kada generatori postanu standardni i više nisu bili potrebni.
Izjava o prinosu zaustavlja izvršenje funkcije i vraća vrijednost pozivaču, uz spremanje stanja i kasnije nastavljanje, što znači da se cijeli generator i dalje može nastaviti nakon dobivanja povratne vrijednosti. Izjava o povratku završava izvršenje funkcije i vraća pozivajuću vrijednost natrag. Bez njega vaša funkcija ne vraća ništa. Pogledajmo dobro kada treba iskoristiti prinos i kada upotrijebiti return u Pythonu kako bismo bolje razumjeli razliku između to dvoje.
Izjava o prinosu koristi se u Python generatorima kako bi se zamijenio povratak funkcije kako bi se vrijednost vratila svom pozivaocu bez uništavanja lokalnih varijabli. Da biste bolje razumjeli kakvu ulogu igra izjava o prinosu u Python programiranju, morate razumjeti što su generatori.
Funkcije generatora proizvode se po definiciji poput uobičajenih funkcija, ali sadrže izjavu o prinosu. Ovo započinje s ključnom riječi "prinos" koja određuje objekt generatora koji se vraća pozivaocu. Generator je posebna funkcija u Pythonu koja vraća objekt generatora pozivaocu umjesto vrijednosti podataka. Prirodna ključna riječ ima jedinstvenu sposobnost zaustavljanja izvršavanja funkcije, spremanja stanja i kasnijeg nastavljanja.
Izjava o povratu, za razliku od izjave o prinosu, izlazi iz funkcije i vraća pozivaocu vrijednost. Funkcije vraćaju vrijednost svojim pozivaocima, a one više proceduralne naravi izričito ne vraćaju ništa. Iako funkcija može imati više iskaza povratka, samo se jedan od njih može pozvati za bilo koji poziv funkcije.
Obično se izjava povrata pojavljuje na samom kraju funkcionalnog bloka da bi se vratio konačni rezultat izvršenja svih izjava sadržanih u toj funkciji. No može se pojaviti i ranije u funkcijskom bloku da zaustavi izvršavanje svih narednih izraza u tom bloku. Time se odmah nastavlja izvršavanje programa kod pozivatelja. Kada nije navedena nijedna vrijednost, ekvivalentna vrsta povratnog objekta na Pythonu je "None".
Sintaktički, prinos je ključna riječ koja se može koristiti baš kao i ključna riječ povrat, osim što iskaz povrata prekida izvršenje vaše funkcije i vraća pozivaocu vrijednost. Funkcionalnost izjave povrata je da preuzme unose i nešto vrati pozivaocu. Za razliku od povrata, iskaz iskorištenja izričito se koristi za definiranje generatora, zamjenjujući povratnu vrijednost funkcije za zaustavljanje njezinog izvršavanja zadržavajući nepromijenjene lokalne varijable, dok izjava povrata uništava sve lokalne varijable unutar.