Išeiga „Python“ pamokoje: generatorius ir amp; Pajamos ir grąžos pavyzdys

Kas yra „Python“ derlius?

Pelningumo raktinis žodis „python“ veikia kaip grąža su vieninteliu

skirtumas yra tas, kad užuot grąžinęs vertę, jis grąžina skambinančiajam generatoriaus objektą.

Kai iškviečiama funkcija ir vykdymo gija funkcijoje randa derliaus raktinį žodį, funkcijos vykdymas sustoja ties šia linija ir grąžina generatoriaus objektą skambinančiajam.

Šioje „Python“ pamokoje sužinosite:

  • Kas yra „Python“ derlius?
  • Sintaksė
  • Kas yra „Python“ generatoriai?
  • Skirtumas tarp normalios funkcijos v / s generatoriaus funkcijos.
  • Kaip nuskaityti vertes iš generatoriaus?
  • Generatoriai yra vienkartiniai
  • Pavyzdys: „Fibonacci“ serijos generatoriai ir našumas
  • Pavyzdys: skambinimo funkcija su pajamingumu
  • Kada „Python“ vietoje „Return“ naudoti „Yield“
  • Derlius prieš grąžą

Sintaksė

yield expression

apibūdinimas

„Python“ derlius grąžina generatoriaus objektą. Generatoriai yra specialios funkcijos, kurias reikia kartoti, kad gautume reikšmes.

Derliaus raktinis žodis paverčia išraišką į generatoriaus funkciją, kuri grąžina generatoriaus objektą. Norint gauti objekto reikšmes, reikia kartoti, kad būtų perskaitytos derliui pateiktos vertės.

Pavyzdys: derliaus metodas

Čia yra paprastas derlingumo pavyzdys. Funkcijoje testyield () yra derlingumo raktinis žodis su eilute „Welcome to Guru99 Python Tutorials“. Kai iškviečiama funkcija, išvestis atspausdinama ir vietoj faktinės reikšmės pateikiamas generatoriaus objektas.

def testyield():yield "Welcome to Guru99 Python Tutorials"output = testyield()print(output)

Išvestis:

Pateikta išvestis yra generatoriaus objektas, kurio vertę mes davėme, kad gautume.

Bet mes negauname žinios, kurią turime duoti, kad gautume produkciją!

Jei norite atsispausdinti gautą pranešimą, reikės kartoti generatoriaus objektą, kaip parodyta toliau pateiktame pavyzdyje:

def testyield():yield "Welcome to Guru99 Python Tutorials"output = testyield()for i in output:print(i)

Rezultatas

Welcome to Guru99 Python Tutorials

Kas yra „Python“ generatoriai?

Generatoriai yra funkcijos, kurios grąžina kartojamą generatoriaus objektą. Vertės iš generatoriaus objekto gaunamos po vieną, o ne visą sąrašą kartu, taigi gaunamos faktinės vertės, kurias galite naudoti „for-loop“, naudodami metodą „next“ () arba „list“ ().

Naudojant generatoriaus funkciją

Generatorius galite sukurti naudodami generatoriaus funkciją ir naudodami generatoriaus išraišką.

Generatoriaus funkcija yra kaip įprasta funkcija, užuot turėjusi grąžinimo vertę, ji turės pajamingumo raktinį žodį.

Norėdami sukurti generatoriaus funkciją, turėsite pridėti pajamingumo raktinį žodį. Šie pavyzdžiai rodo, kaip sukurti generatoriaus funkciją.

def generator():yield "H"yield "E"yield "L"yield "L"yield "O"test = generator()for i in test:print(i)

Išvestis:

HELLO

Skirtumas tarp normalios funkcijos v / s generatoriaus funkcijos.

Supraskime, kuo generatoriaus funkcija skiriasi nuo įprastos funkcijos.

Yra 2 funkcijos: normal_test () ir generator_test ().

Tarkime, kad abi funkcijos grąžins eilutę „Hello World“. Normalus_testas () naudoja grąžą, o generatorius_testas () - derlingumą.

# Normal functiondef normal_test():return "Hello World"#Generator functiondef generator_test():yield "Hello World"print(normal_test()) #call to normal functionprint(generator_test()) # call to generator function

Išvestis:

Hello World

Išvestis rodo, kad kai iškviečiate normalią funkciją normal_test (), ji grąžina „Hello World“ eilutę. Generatoriaus funkcijai su derliaus raktiniu žodžiu jis grąžina , o ne eilutę.

Tai yra pagrindinis skirtumas tarp generatoriaus funkcijos ir normalios funkcijos. Dabar, norėdami gauti vertę iš generatoriaus objekto, turime naudoti kilpoje esantį objektą arba naudoti „next“ () metodą arba naudoti sąrašą ().

print(next(generator_test())) # will output Hello World

Dar vienas skirtumas, kurį reikia pridėti prie įprastos funkcijos v / s generatoriaus funkcijos, yra tai, kad iškvietus įprastą funkciją, vykdymas prasidės ir sustos, kai jis grįš, o vertė bus grąžinta skambinančiajam. Taigi, kai prasidės vykdymas, negalėsite sustabdyti įprastos funkcijos tarp jų ir ji sustos tik tada, kai aptiks grąžinimo raktinį žodį.

Tačiau generatoriaus funkcijos atveju, kai vykdymas prasideda, kai gauna pirmąjį derlių, jis sustabdo vykdymą ir grąžina generatoriaus objektą. Galite naudoti generatoriaus objektą, kad gautumėte vertes, taip pat pristabdykite ir tęskite, kaip reikalaujate.

Kaip nuskaityti vertes iš generatoriaus?

Vertes iš generatoriaus objekto galite perskaityti naudodami „list“ („for-loop“) ir „next“ () metodą.

Naudojant: sąrašas ()

Sąrašas yra kartojamas objektas, kurio elementai yra skliausteliuose. Naudojant generatoriaus objekto sąrašą (), bus suteiktos visos generatoriaus turimos vertės.

def even_numbers(n):for x in range(n):if (x%2==0):yield xnum = even_numbers(10)print(list(num))

Išvestis:

[0, 2, 4, 6, 8]

Naudojant: for-in

Šiame pavyzdyje yra funkcija, apibrėžta lyginiai_skaitai (), kuri suteiks jums visus n lygiųjų skaičius. Iškvietus funkciją „even_numbers ()“ bus grąžintas generatoriaus objektas, naudojamas „for-loop“ viduje.

Pavyzdys:

def even_numbers(n):for x in range(n):if (x%2==0):yield xnum = even_numbers(10)for i in num:print(i)

Išvestis:

02468

Naudojamas kitas ()

Kitas () metodas suteiks jums kitą sąrašą, masyvą ar objektą. Kai sąrašas tuščias ir iškviečiamas kitas (), jis grąžins klaidą su „stopIteration“ signalu. Ši klaida nuo kito () rodo, kad sąraše nebėra elementų.

def even_numbers(n):for x in range(n):if (x%2==0):yield xnum = even_numbers(10)print(next(num))print(next(num))print(next(num))print(next(num))print(next(num))print(next(num))

Išvestis:

02468Traceback (most recent call last):File "main.py", line 11, in print(next(num))StopIteration

Generatoriai yra vienkartiniai

Generatorius, kuriuos galima naudoti tik vieną kartą. Jei bandysite juos naudoti dar kartą, jis bus tuščias.

Pavyzdžiui:

def even_numbers(n):for x in range(n):if (x%2==0):yield xnum = even_numbers(10)for i in num:print(i)print("\n")print("Calling the generator again: ", list(num))

Išvestis:

02468Calling the generator again: []

Jei norite, kad išvestis būtų naudojama dar kartą, turėsite paskambinti, kad vėl veiktų.

Pavyzdys: „Fibonacci“ serijos generatoriai ir našumas

Šis pavyzdys parodo, kaip naudoti „Python“ generatorius ir derlingumą. Pavyzdys sugeneruos „Fibonacci“ seriją.

def getFibonnaciSeries(num):c1, c2 = 0, 1count = 0while count < num:yield c1c3 = c1 + c2c1 = c2c2 = c3count += 1fin = getFibonnaciSeries(7)print(fin)for i in fin:print(i)

Išvestis:

0112358

Pavyzdys: skambinimo funkcija su pajamingumu

Šiame pavyzdyje pamatysite, kaip iškviesti funkciją su išeiga.

Žemiau pateiktame pavyzdyje yra funkcija, vadinama test (), kuri grąžina nurodyto skaičiaus kvadratą. Yra dar viena funkcija, vadinama getSquare (), kuri naudoja test () su pajamingumo raktiniu žodžiu. Išvestis nurodo kvadratinę vertę nurodytam skaičių diapazonui.

def test(n):return n*ndef getSquare(n):for i in range(n):yield test(i)sq = getSquare(10)for i in sq:print(i)

Išvestis:

0149162536496481

Kada „Python“ vietoje „Return“ naudoti „Yield“

„Python3 Yield“ raktinis žodis grąžina skambintojui generatorių ir kodas pradedamas vykdyti tik tada, kai generatorius pakartojamas.

Grąžinimo funkcija, yra funkcijos vykdymo pabaigos, o vieno vertė grąžinama į skambinančiojo.

Čia yra situacija, kai turėtumėte naudoti „Return“, o ne „Return“

  • Jei duomenų dydis didelis, naudokite pelningumą, o ne grąžą
  • Išeiga yra geriausias pasirinkimas, kai reikia, kad didelių duomenų rinkinių vykdymas būtų greitesnis
  • Naudokite pelningumą, kai norite grąžinti didelę reikšmių rinkinį į iškvietimo funkciją
  • Išeiga yra efektyvus būdas kaupti duomenis, kurie yra dideli arba begaliniai.

Derlius prieš grąžą

Čia yra skirtumai tarp pajamingumo ir grąžos

Derlius Grįžti
Išeiga grąžina skambinančiajam generatoriaus objektą, o kodas pradedamas vykdyti tik tada, kai generatorius pakartojamas. Funkcijos grąžinimas yra funkcijos vykdymo pabaiga, o skambinančiajam grąžinama viena vertė.
Kai funkcija iškviečiama ir ji susiduria su pajamingumo raktiniu žodžiu, funkcijos vykdymas sustoja. Jis grąžina generatoriaus objektą skambinančiajam. Funkcijos vykdymas prasidės tik tada, kai bus vykdomas generatoriaus objektas. Kai iškviečiama funkcija, vykdymas prasideda ir vertė grąžinama skambinančiajam, jei yra grįžimo raktinis žodis. Grįžimas funkcijos viduje žymi funkcijos vykdymo pabaigą.
derliaus išraiška grąžinimo išraiška
Naudojant derlingumo raktinį žodį, atmintis nenaudojama. Atmintis priskiriama grąžinamai vertei.
Labai naudinga, jei tenka susidurti su didžiuliu duomenų dydžiu, nes atmintis nenaudojama. Patogu labai mažam duomenų dydžiui.
Našumas yra geresnis, jei didelių duomenų dydžiui naudojamas pelningumo raktinis žodis. Daug duomenų naudojama, jei duomenų dydis yra didelis, o tai trukdys našumui.
Vykdymo laikas yra greitesnis, jei gaunamas didelis duomenų dydis. Naudojamas vykdymo laikas yra daugiau, nes yra atliekamas papildomas apdorojimas tuo atveju, jei jūsų duomenų dydis yra didžiulis, jis bus tinkamas mažiems duomenų dydžiams.

Santrauka:

  • „Python“ pajamingumo raktinis žodis veikia kaip grąža, o vienintelis skirtumas yra tas, kad užuot grąžinęs vertę, jis grąžina skambinančiajam generatoriaus funkciją.
  • Generatorius yra specialus iteratoriaus tipas, kurio panaudojus daugiau nebebus galima naudotis. Vertės nėra saugomos atmintyje ir yra prieinamos tik tada, kai iškviečiamos.
  • Generatoriaus reikšmes galima nuskaityti naudojant for-in, list () ir next () metodą.
  • Pagrindinis skirtumas tarp grąžos ir grąžos yra tas, kad pelningumas grąžina skambinančiojo generatoriaus funkciją, o grįžimas suteikia skambintojui vieną vertę.
  • Išeiga atmintyje nesaugo nė vienos vertės, o privalumas yra tas, kad ji yra naudinga, kai duomenų dydis yra didelis, nes nė viena iš reikšmių nėra saugoma atmintyje.
  • Našumas yra geresnis, jei norint gauti didelių duomenų dydį, naudojamas pelningumo raktinis žodis.

Įdomios straipsniai...