gyakorlati példák
Pythonban az iteráció lehetővé teszi számunkra, hogy áttekintsük az elemek listáját bizonyos műveletek végrehajtásához. Az iteráció létrehozásának egyik általános módja a for
hurkok használata, amelyek a következő általános formátumúak.
for i in iterable:
expression
amint azt az előző cikkemben tárgyaltuk, létrehozhatunk egyéni iterátorokat, amelyek iterablesként használhatók a for
hurkokban. Az iterátorok “kacsa tesztelésének” kielégítéséhez az egyéni osztálynak végre kell hajtania a __iter__()
és __next__()
módszereket. Az alábbiakban egy konkrét példa található.
a fenti kódrészletben mind a __iter__()
, mind a __next__()
módszereket implementáltuk, amelyek az egyéni osztály példányait Cubes
iterátorokká teszik, így a példány for
ciklusban használható.
Callables
a beépített dict
adattípus mellett egy másik fontos szótártípus a defaultdict
, amely a collections
modulban érhető el. Ez a szótárszerű adattípus a következő konstruktorral rendelkezik: defaultdict(])
. Pontosabban, a default_factory
argumentum egyfajta hívható, például függvény vagy lambda függvény.
előző cikkemben megmutattam, hogy a defaultdict
– ot egy lambda függvény átadásával tudjuk használni. Íme egy példa a használatára.
>>> from collections import defaultdict
>>> letter_counts = defaultdict(lambda: 0)
>>> for i in 'abcddddeeeee':
... letter_counts += 1
...
>>> letter_counts.items()
dict_items()
nevezetesen, nagyobb rugalmasságot tudunk biztosítani a defaultdict
adattípus használatához, ha saját alapértelmezett gyárat hozunk létre. A “kacsa gépelés” filozófiájával az egyéni osztálynak végre kell hajtania a __call__()
módszert, ami valami hívhatóvá tétele. Lássuk, hogyan működik.
amint azt a fenti kódot, hozzuk létre a DucklingFactory
osztály, amelynek __call__()
függvény egy listát egy Duckling
példány. Ennek a gyári funkciónak a használatával Az alapértelmezett kiskacsák listájának szorzásával elkészíthetjük a kívánt kiskacsák számát.
válogatás a Len()
a kacsa gépelés Másik lehetséges használata az egyedi len()
funkció megvalósítása, amely felhasználható a lista rendezéséhez a sort()
funkcióval. Mellékesen megjegyezném, hogy egyesek a len()
függvényt mágikus függvénynek nevezik, mert a __len__()
függvénynek a színfalak mögött történő meghívásával valósítják meg (azokat a függvényeket, amelyek kettős aláhúzással rendelkeznek előtagként és utótagként, mágikus függvényeknek nevezzük).
tegyük fel, hogy a kacsák listáját az egyes kacsák nevének hossza alapján szeretnénk rendezni. Itt van, hogyan tudjuk alkalmazni a kacsa gépelés ebben az esetben.
válogatásban a fenti kódrészletben az egyéni NamedDuck
osztály a __str__()
és __len__()
funkciókat valósítja meg, amelyek lehetővé teszik számunkra, hogy a str()
és len()
funkciókat használjuk példányain a 10.és a 12. sorban. Fontos, hogy mint látható, bár a lista keveredik a megnevezett kacsákkal és karakterláncokkal, minden elem meghívhatja a str()
és len()
függvényeket, így a lista rendezhető a len()
kulcs segítségével, és használható a lista megértésében, amikor ki akarjuk nyomtatni a rendezett eredményt.
ennek a használatnak a tágabb következménye tehát az, hogy ha különböző adattípusok elemeinek vegyes listája van, mindaddig, amíg az egyes adattípusok ugyanazokat a funkciókat valósítják meg, az elemek átmennek a kacsa tesztelésen, és a megfelelő műveletekkel alkalmazhatók. Íme egy általános használati példa a len () függvény használatával a str
, tuple
és list
adattípusok vegyes listáján.
>>> mixed_list = ]
>>> mixed_list.sort(key=len)
>>> mixed_list
, (1, 2), 'Amazing']