Ankkakirjoitus Pythonissa – 3 käytännön esimerkkejä

käytännön esimerkkejä

Pythonissa iteroinnin avulla voidaan käydä läpi lista kohteista, joilla voidaan suorittaa tiettyjä operaatioita. Yksi yleinen tapa luoda iteraatio on käyttää for silmukoita, joilla on seuraava yleinen muoto.

for i in iterable:
expression

kuten edellisessä artikkelissani todettiin, voimme luoda omia iteraattoreitamme, joita voidaan käyttää iteraattoreina for – silmukoissa. Iteraattoreiden ”ankkatestauksen” täyttämiseksi custom-luokan on toteutettava __iter__() ja __next__() – menetelmät. Alla on erityinen esimerkki.

Ankkakirjoitus Iteraattoreissa

yllä olevassa koodinpätkässä toteutimme sekä __iter__() että __next__() menetelmiä, joiden avulla custom-luokan Cubes iteraattorit saadaan siten, että instanssia voitiin käyttää for silmukassa.

Callables

sisäänrakennetun dict tietotyypin lisäksi toinen tärkeä sanakirjatyyppi on defaultdict, joka löytyy collections-moduulista. Tällä sanakirjamaisella tietotyypillä on seuraava konstruktio: defaultdict(]). Erityisesti default_factory – argumentti on kutsuttava tyyppi, kuten funktio tai lambda-funktio.

edellisessä kirjoituksessani osoitin, että voimme hyödyntää defaultdict: ää läpäisemällä lambda-funktion. Tässä on esimerkki sen käytöstä.

>>> from collections import defaultdict
>>> letter_counts = defaultdict(lambda: 0)
>>> for i in 'abcddddeeeee':
... letter_counts += 1
...
>>> letter_counts.items()
dict_items()

varsinkin defaultdict tietotyypin käyttö voi sujua joustavammin, jos luomme oman oletustehtaan. ”Ankkakirjoitusfilosofialla” kustomoidun luokan on toteutettava __call__() – menetelmä, joka on tehdä jotain kutsuttavaa. Katsotaan, miten se toimii.

Ankkakirjoitus kutsuilla

kuten yllä olevasta koodista käy ilmi, luodaan DucklingFactory luokka, jonka __call__() funktio palauttaa luettelon yhdestä Duckling esiintymästä. Tämän tehdastoiminnon avulla voimme tehdä halutun määrän ankanpoikasia kertomalla oletuslistan.

Lajittelu Len-funktiolla ()

toinen mahdollinen sorsatyypityksen käyttötapa on toteuttaa oma len() – funktio, jota voidaan käyttää luettelon lajittelussa sort() – funktion avulla. Sivuhuomautuksena jotkut viittaavat len() – funktioon taikafunktiona, koska se toteutetaan kutsumalla __len__() – funktiota kohtauksen takana (niitä funktioita, joissa on kaksoisalaviiva etuliitteenä ja loppuliitteenä, kutsutaan taikafunktioiksi).

Oletetaan, että haluamme lajitella luettelon sorsista kunkin Sorsan nimen pituuden perusteella. Näin voimme soveltaa ankka kirjoittamalla tässä tapauksessa.

Ankkakirjoitus lajittelussa

yllä olevassa koodinpätkässä custom NamedDuck luokka toteuttaa __str__() ja __len__() funktiot, joiden avulla voidaan käyttää str() ja len() funktioita sen instansseissa linjoilla 10 ja 12. Tärkeää on, että vaikka lista on sekoitettu nimettyihin ankkoihin ja merkkijonoihin, kaikki elementit voivat kutsua funktioita str() ja len() siten, että luettelo voidaan lajitella käyttäen avainta len() ja käyttää sitä luettelon ymmärtämisessä, kun haluamme tulostaa lajitellun tuloksen.

tämän käytön laajempi seuraus on siis se, että kun meillä on eri tietotyyppien eri osien sekalainen luettelo, kunhan kukin tietotyyppi toteuttaa samat toiminnot, elementit läpäisevät ankkatestin ja niitä sovelletaan asianmukaisin operaatioin. Tässä on yleinen käyttötapausesimerkki käyttäen Len () – funktiota sekalaisessa luettelossa tietotyypeistä str, tuple ja list.

>>> mixed_list = ]
>>> mixed_list.sort(key=len)
>>> mixed_list
, (1, 2), 'Amazing']

You might also like

Vastaa

Sähköpostiosoitettasi ei julkaista.