Python hozam - hogyan válhat programozóvá
A hozam a kulcsszó, amelyet a hallgatói funkcióból való kilépéshez használnak. Hasonló funkciógenerátorokat használnak, amikor egy komplexebb szekvenciát kell létrehozni, mint a visszaküldött tartományt (10).
Ahhoz, hogy megértsük, milyen hozamú, meg kell értenünk, hogy mi generátorok. A generátorokat iterátorok előzik meg. Lista létrehozásakor egyes elemeit elolvashatja - ez az iteráció:
A Mylist egy iterábilis tárgy. Amikor létrehoz egy listát a generátor kifejezés használatával, létrehoz egy iterátort is:
Minden lehetséges, hogy alkalmazza a tervezési «for ... in ...», az iterable: listák, karakterláncok fájlokat ... Ez kényelmes, mert lehet olvasni ezeket az értékeket, ha szükséges -, de minden érték a memóriában tárolódnak, ami nem mindig kívánatos, ha sok jelentése van.
Python generátorok
A generátorok is iterált objektumok, de csak egyszer olvashatnak. Ez annak a ténynek köszönhető, hogy nem tárolnak értékeket a memóriában, hanem létrehozzák őket:
Mindazonáltal, kivéve a zárójelek helyett a zárójeleket. NO: lehetetlen alkalmazni szerkezetét i mygenerator másodszor, mert a generátor csak egyszer használható: kiszámítja 0, akkor megfeledkezik róla, és kiszámítja az egyik, elvégzi a számítást 4 - egyiket a másik után.
A hozam olyan kulcsszó, amelyet egy generátor visszatérő funkciójának visszaadása céljából használnak.
Ebben az esetben a példa haszontalan, de kényelmes, ha tudod, hogy a függvény nagy számú értéket ad vissza, amelyet csak egyszer kell olvasnia.
A hozam megértéséhez meg kell értened, hogy amikor egy függvényt hívsz, a kódot a függvénytestben nem hajtja végre. A funkció csak egy objektumgenerátort ad vissza - egy kicsit trükkös :-)
A kódot minden alkalommal hívják a generátorhoz érkező hívásokhoz.
Most a nehéz rész:
A funkció első futtatásakor az elejétől a pillanatig végrehajtódik, amikor találkozik a hozammal - ezután visszaadja az első értéket a hurokból. Minden egyes következő hívás esetén a ciklus új iterációja lesz, a következő értéket visszaadják - és mindaddig, amíg az értékek nem fejeződnek be.
A generátor üresnek tekintendő, amint a funkció kódja nem mutat termést. Ez történhet a hurok vége miatt, vagy ha az "if / else" feltételek egy része nem teljesül.
A kiterjesztés () metódus olyan listaobjektum-módszer, amely elvárja, hogy valamit megismételjenek és hozzáadják az értékeket a listához.
Általában egy listát adunk neki:
De a kódunkban egy generátorra van szükség, amely a következő okok miatt jó:
És ez azért működik, mert a Python nem érdekli, hogy ez a módszer egy lista-e vagy sem. A Python egy iterábilis objektumot vár, így szalagokkal, listákkal, tuplekkel és generátorokkal dolgozik! Ezt nevezik kacsaírásnak, és az egyik oka annak, hogy a Python annyira jó.