Praktické Příklady
V Pythonu, iterace nám umožňuje jít nad seznamem položek k provedení určité operace. Jedním z běžných způsobů, jak vytvořit iteraci, je použití smyček for
, které mají následující obecný formát.
for i in iterable:
expression
jak je popsáno v mém předchozím článku, můžeme vytvořit naše vlastní iterátory, které lze použít jako iterables v smyčkách for
. Pro splnění „kachního testování“ pro iterátory musí vlastní třída implementovat metody __iter__()
a __next__()
. Konkrétní příklad je uveden níže.
Ve výše uvedeném kódu, zavedli jsme oba __iter__()
a __next__()
metody, které instance vlastní třídy Cubes
iterátory, jako to například bylo možné použít v for
smyčka.
Callables
kromě vestavěného datového typu dict
je dalším důležitým typem slovníku defaultdict
, který je k dispozici v modulu collections
. Tento datový typ podobný slovníku má následující Konstruktor: defaultdict(])
. Konkrétně argument default_factory
je typ volatelného,například funkce nebo funkce lambda.
v mém předchozím článku jsem ukázal, že bychom mohli využít defaultdict
předáním funkce lambda. Zde je příklad jeho použití.
>>> from collections import defaultdict
>>> letter_counts = defaultdict(lambda: 0)
>>> for i in 'abcddddeeeee':
... letter_counts += 1
...
>>> letter_counts.items()
dict_items()
zejména můžeme mít lepší flexibilitu při použití datového typu defaultdict
, pokud vytvoříme vlastní výchozí továrnu. S filozofií „duck typing“ musí vlastní třída implementovat metodu __call__()
, což je něco, co lze volat. Uvidíme, jak to bude fungovat.
, Jak je znázorněno ve výše uvedeném kódu, jsme se vytvořit DucklingFactory
třída, jejíž __call__()
funkce vrátí seznam Duckling
instance. Pomocí této tovární funkce budeme moci vytvořit požadovaný počet kachňat vynásobením výchozího seznamu káčátek.
třídění pomocí Len ()
dalším možným použitím duck typing je implementace vlastní funkce len()
, kterou lze použít při třídění seznamu pomocí funkce sort()
. Jako vedlejší poznámku někteří lidé označují funkci len()
jako magickou funkci, protože je implementována voláním funkce __len__()
za scénou (funkce s dvojitým podtržítkem jako předpona a přípona se nazývají magické funkce).
Předpokládejme, že chceme třídit seznam kachen na základě délky názvu každé kachny. Zde je návod, jak můžeme v tomto případě použít kachní psaní.
Ve výše uvedeném kódu, vlastní NamedDuck
třída implementuje __str__()
a __len__()
funkce, které nám umožňuje použít str()
a len()
funkce na jeho případy v Řádcích 10 a 12, resp. Důležité je, jak vidíte, i když je seznam smíchán s pojmenovanými kachnami a řetězci, všechny prvky mohou volat funkce str()
a len()
, takže seznam lze třídit pomocí len()
jako klíč a použít v seznamu porozumění, když chceme vytisknout tříděný výsledek.
to Znamená, že širší důsledky tohoto použití je, že když máme smíšené seznam prvků různých datových typů, tak dlouho, jak každý datový typ implementuje stejné funkce, prvky přejde kachna testování a být použity s správné operace. Zde je příklad obecného použití Pomocí funkce len() na smíšeném seznamu datových typů str
, tuple
a list
.
>>> mixed_list = ]
>>> mixed_list.sort(key=len)
>>> mixed_list
, (1, 2), 'Amazing']