Funkce Python iter () vrací iterátor pro daný objekt.
iter()
Funkce vytvoří objekt, který může být opakována jeden prvek najednou.
Tyto objekty jsou užitečné, když jsou spojeny se smyčkami jako smyčka for, while.
Syntaxe iter()
funkce je:
iter (objekt, hlídka)
iter () parametry
iter()
Funkce má dva parametry:
- objekt - objekt, jehož iterátor musí být vytvořen (mohou to být množiny, n-tice atd.)
- sentinel (volitelné) - speciální hodnota, která se používá k reprezentaci konce sekvence
Vrátit hodnotu z iter ()
iter()
Funkce vrací objekt iterátoru pro daný objekt.- Pokud uživatelsky definovaný objekt neimplementuje
__iter__()
,__next__()
nebo__getitem()__
seTypeError
vyvolá výjimka. - Pokud je zadán i parametr sentinel,
iter()
vrátí iterátor, dokud znak sentinel nebude nalezen.
Příklad 1: Práce s Python iter ()
# list of vowels vowels = ('a', 'e', 'i', 'o', 'u') vowels_iter = iter(vowels) print(next(vowels_iter)) # 'a' print(next(vowels_iter)) # 'e' print(next(vowels_iter)) # 'i' print(next(vowels_iter)) # 'o' print(next(vowels_iter)) # 'u'
Výstup
aeiou
Příklad 2: iter () pro vlastní objekty
class PrintNumber: def __init__(self, max): self.max = max def __iter__(self): self.num = 0 return self def __next__(self): if(self.num>= self.max): raise StopIteration self.num += 1 return self.num print_num = PrintNumber(3) print_num_iter = iter(print_num) print(next(print_num_iter)) # 1 print(next(print_num_iter)) # 2 print(next(print_num_iter)) # 3 # raises StopIteration print(next(print_num_iter))
Výstup
1 2 3 Traceback (poslední hovor poslední): Soubor "", řádek 23, v souboru "", řádek 11, v __next__ StopIteration
Příklad 3: iter () s parametrem sentinel
class DoubleIt: def __init__(self): self.start = 1 def __iter__(self): return self def __next__(self): self.start *= 2 return self.start __call__ = __next__ my_iter = iter(DoubleIt(), 16) for x in my_iter: print(x)
Výstup
2 4 8
Zde jsme implementovali vlastní iterovatelný objekt bez StopIteration
podmínky.
Můžeme však použít iter()
metodu s sentinel
parametrem k zastavení iterace. Pokud se hodnota vrácená z __next__()
rovná sentinel
, StopIteration
bude vyvolána, v opačném případě bude vrácena hodnota.
Doporučená literatura: Pythonové iterátory