Mi a Python hozama?
A hozam kulcsszó a pythonban úgy működik, mint egy hozam
A különbség az, hogy egy érték visszaadása helyett egy generátor objektumot ad vissza a hívónak.
Amikor egy függvény meghívásra kerül, és a végrehajtás szála hozam kulcsszót talál a függvényben, akkor a függvény végrehajtása azon a vonalon áll meg, és egy generátor objektumot ad vissza a hívónak.
Ebben a Python oktatóanyagban megtudhatja:
- Mi a Python hozama?
- Szintaxis
- Mik a generátorok a Pythonban?
- Különbség a normál funkció v / s generátor funkciója között.
- Hogyan olvassuk le az értékeket a generátorból?
- A generátorok egyszer használatosak
- Példa: Generátorok és hozam a Fibonacci sorozathoz
- Példa: Hívási funkció hozammal
- Mikor kell használni a hozamot a Return helyett a Pythonban
- Hozam vs visszatér
Szintaxis
yield expression
Leírás
A Python hozama egy generátor objektumot ad vissza. A generátorok speciális funkciók, amelyeket meg kell ismételni az értékek megszerzéséhez.
A hozam kulcsszó átalakítja a megadott kifejezést generátorfüggvénygé, amely generátorobjektumot ad vissza. Az objektum értékeinek megszerzéséhez ismételni kell a hozamhoz adott értékek beolvasását.
Példa: Hozam módszer
Itt van egy egyszerű példa a hozamra. A testyield () függvénynek van egy hozam kulcsszava az "Welcome to Guru99 Python Tutorials" karakterlánccal. A függvény meghívásakor a kimenet kinyomtatásra kerül, és generátorobjektumot ad a tényleges érték helyett.
def testyield():yield "Welcome to Guru99 Python Tutorials"output = testyield()print(output)
Kimenet:
A megadott kimenet egy generátor objektum, amelynek értéke megadja a hozamot.
De nem azt az üzenetet kapjuk, amelyet meg kell adnunk a kimenet hozamához!
A hozandó üzenet kinyomtatásához meg kell ismételni a generátor objektumot, az alábbi példában látható módon:
def testyield():yield "Welcome to Guru99 Python Tutorials"output = testyield()for i in output:print(i)
Kimenet
Welcome to Guru99 Python Tutorials
Mik a generátorok a Pythonban?
A generátorok olyan funkciók, amelyek iterálható generátor objektumot adnak vissza. A generátorobjektum értékei egyenként kapják meg a teljes lista helyett, és így megkapják a tényleges értékeket, amelyeket a for-ciklusban használhat a következő () vagy a lista () módszerrel.
Generátor funkció használata
Generátorokat generálhat generátor funkcióval és generátor kifejezéssel.
A generátorfüggvény olyan, mint egy normál függvény, visszatérési érték helyett hozamkulcsszóval rendelkezik.
Generátor funkció létrehozásához hozzá kell adnia egy hozam kulcsszót. Az alábbi példák bemutatják, hogyan lehet létrehozni egy generátorfüggvényt.
def generator():yield "H"yield "E"yield "L"yield "L"yield "O"test = generator()for i in test:print(i)
Kimenet:
HELLO
Különbség a normál funkció v / s generátor funkciója között.
Értsük meg, hogy a generátorfüggvény miben különbözik a normál függvénytől.
Két függvény létezik: normal_test () és generator_test ().
Tegyük fel, hogy mindkét funkció visszatér a "Hello World" karakterlánchoz. A normal_test () visszatérést, a generator_test () pedig hozamot használ.
# 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
Kimenet:
Hello World
A kimenet azt mutatja, hogy a normál_teszt () függvény meghívásakor a Hello World karakterláncot adja vissza. A hozam kulcsszóval rendelkező generátorfüggvényhez a
Ez a fő különbség a generátor és a normál funkció között. Most, hogy megkapjuk az értéket a generátor objektumból, vagy a belső objektumot kell használnunk a ciklushoz, vagy a next () metódust kell használnunk, vagy használnunk kell a list () listát.
print(next(generator_test())) # will output Hello World
Még egy különbség, amelyet hozzá kell adni a v / s generátor normál funkciójához, hogy amikor meghív egy normál függvényt, a végrehajtás elindul és leáll, amikor visszatér, és az érték visszatér a hívóhoz. Tehát amikor a végrehajtás megkezdődik, nem állíthatja le a normál funkciót a kettő között, és csak akkor áll le, amikor a return kulcsszóval találkozik.
De a generátor funkció esetén, ha a végrehajtás megkezdődik, amikor megkapja az első hozamot, leállítja a végrehajtást és visszaadja a generátor objektumot. Használhatja a generátor objektumot az értékek lekérdezéséhez, valamint szüneteltetheti és folytathatja a követelményeinek megfelelően.
Hogyan olvassuk le az értékeket a generátorból?
A generátorobjektum értékeit list (), for-loop és next () módszerrel olvashatja el.
Használja: list ()
A lista egy iterálható objektum, amelynek elemei zárójelben vannak. A lista () használata egy generátorobjektumon megadja a generátor által birtokolt összes értéket.
def even_numbers(n):for x in range(n):if (x%2==0):yield xnum = even_numbers(10)print(list(num))
Kimenet:
[0, 2, 4, 6, 8]
Használat: for-in
A példában van egy függvény által meghatározott páros_szám (), amely megadja az összes páros számot az n-hez. A even_numbers () függvény meghívása egy generátor objektumot ad vissza, amelyet a for-loop belsejében használnak.
Példa:
def even_numbers(n):for x in range(n):if (x%2==0):yield xnum = even_numbers(10)for i in num:print(i)
Kimenet:
02468
A következő () használata
A következő () metódus megadja a következő elemet a listában, tömbben vagy objektumban. Ha a lista üres, és ha a következő () meghívásra kerül, akkor a stopIteration jel hibát ad vissza. Ez a hiba a következőtől () azt jelzi, hogy nincs több elem a listában.
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))
Kimenet:
02468Traceback (most recent call last):File "main.py", line 11, inprint(next(num))StopIteration
A generátorok egyszer használatosak
A generátorok csak egyszer használhatók. Ha újra megpróbálja használni őket, akkor az üres lesz.
Például:
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))
Kimenet:
02468Calling the generator again: []
Abban az esetben, ha újra szeretné használni a kimenetet, újra be kell hívnia a működést.
Példa: Generátorok és hozam a Fibonacci sorozathoz
Az alábbi példa bemutatja, hogyan kell használni a generátorokat és a hozamot a Pythonban. A példa előállítja a Fibonacci sorozatot.
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)
Kimenet:
0112358
Példa: Hívási funkció hozammal
Ebben a példában megtudhatjuk, hogyan hívhatunk függvényt hozammal.
Az alábbi példában van egy teszt () nevű függvény, amely az adott szám négyzetét adja vissza. Van még egy getSquare () nevű függvény, amely a test () -t használja hozam kulcsszóval. A kimenet megadja az adott számtartomány négyzetértékét.
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)
Kimenet:
0149162536496481
Mikor kell használni a hozamot a Return helyett a Pythonban
A Python3 Yield kulcsszó generátort ad vissza a hívónak, és a kód végrehajtása csak a generátor iterálásakor kezdődik.
A függvény visszatérése a függvény végrehajtásának vége, és egyetlen értéket kap vissza a hívó.
Itt van az a helyzet, amikor a Return helyett a Hozamot kell használnia
- Használjon hozamot visszatérés helyett, ha az adatméret nagy
- A hozam a legjobb választás, ha gyorsabb végrehajtásra van szüksége a nagy adatkészleteknél
- Használja a hozamot, ha nagy értékkészletet szeretne visszaadni a hívó függvénynek
- A hozam hatékony módszer a nagy vagy végtelen adatok előállítására.
Hozam vs visszatér
Itt vannak a különbségek a hozam és a visszatérés között
Hozam | Visszatérés |
A Hozam generátorobjektumot ad vissza a hívónak, és a kód végrehajtása csak a generátor iterálásakor kezdődik. | A függvény visszatérése a függvény végrehajtásának vége, és egyetlen értéket kap vissza a hívó. |
Amikor a függvény meghívásra kerül, és találkozik a hozam kulcsszóval, a függvény végrehajtása leáll. Visszaadja a generátor objektumot a hívónak. A függvény végrehajtása csak a generátor objektum végrehajtásakor indul. | A függvény meghívásakor elindul a végrehajtás, és ha van visszatérési kulcsszó, akkor az értéket visszaküldi a hívónak. A függvényen belüli visszatérés jelzi a függvény végrehajtásának végét. |
hozam kifejezése | visszatérő kifejezés |
A hozam kulcsszó használatakor nincs memória. | A memória a visszaadott értékhez van rendelve. |
Nagyon hasznos, ha hatalmas adatmérettel kell megküzdenie, mivel a memória nincs használva. | Kényelmes nagyon kis adatmérethez. |
A teljesítmény jobb, ha a hozam kulcsszót nagy adatmérethez használják. | Sok memória kerül felhasználásra, ha az adatméret hatalmas, ami hátráltatja a teljesítményt. |
A végrehajtási idő gyorsabb, ha nagy adatmennyiség hozama van. | A felhasznált végrehajtási idő több, mivel extra feldolgozásra van szükség abban az esetben, ha az adatmérete hatalmas, akkor kis adatok esetén is jól működik. |
Összegzés:
- A hozam kulcsszó a pythonban úgy működik, mint egy megtérülés, az egyetlen különbség az, hogy egy érték visszaadása helyett egy generátor funkciót ad vissza a hívónak.
- A generátor az iterátor speciális típusa, amely használat után nem lesz többé elérhető. Az értékeket nem tárolja a memória, és csak híváskor állnak rendelkezésre.
- A generátor értékei leolvashatók a for-in, list () és a next () módszerrel.
- A hozam és a visszatérés közötti fő különbség az, hogy a hozam egy generátor funkciót ad vissza a hívónak, a visszatérés pedig egyetlen értéket ad a hívónak.
- A hozam egyik értéket sem tárolja a memóriában, és előnye, hogy hasznos, ha az adatméret nagy, mivel egyik értéket sem tárolja a memória.
- A teljesítmény jobb, ha a hozam kulcsszót használjuk a nagy adatmérethez való visszatéréshez.