Функція iter() повертає ітератор для вказаного аргументу. Наприклад:
|
1 2 3 4 5 6 7 |
# Список голосних phones = ['apple', 'samsung', 'oneplus'] phones_iter = iter(phones) print(next(phones_iter)) print(next(phones_iter)) print(next(phones_iter)) |
Результат:
apple
samsung
oneplus
Синтаксис функції iter()
|
1 |
iter(object, sentinel) |
Параметри функції iter()
Функція iter() приймає два параметри:
object — може бути списком, множиною, кортежем тощо;
sentinel (не обов’язково) — спеціальне значення, яке використовується для позначення кінця послідовності.
Значення, яке повертає функція iter()
Функція iter() повертає:
об’єкт ітератора для вказаного аргументу, доки не буде знайдено завершальний символ;
помилку TypeError для об’єкта користувача, який не має реалізації методу __iter__(), __next__() або __getitem__().
Приклад №1: Функція iter() в Python
|
1 2 3 4 5 6 7 8 9 10 11 |
# Список голосних vowels = ["a", "e", "i", "o", "u"] # Функція iter() зі списком голосних vowels_iter = iter(vowels) print(next(vowels_iter)) print(next(vowels_iter)) print(next(vowels_iter)) print(next(vowels_iter)) print(next(vowels_iter)) |
Результат:
a
e
i
o
u
Тут ми використали функцію iter() зі списком голосних. Функція повертає окремі елементи a, e, i, o, u зі списку в якості об’єктів ітератора.
Приклад №2: Функція iter() з об’єктами користувача
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
class PrintNumber: def __init__(self, max): self.max = max # Функція iter() у класі def __iter__(self): self.num = 0 return self # Функція next() у класі 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)) print(next(print_num_iter)) print(next(print_num_iter)) # Викликаємо StopIteration print(next(print_num_iter)) |
Результат:
1
2
3
Traceback (most recent call last):
File "", line 24, in module
File "", line 12, in __next__
StopIteration
Тут ми вивели числа ітератора 1, 2, 3 за допомогою методів __iter__() та __next__(). Метод __next__() має цикл, який виконується до тих пір, поки self.num не стане більше чи рівне self.max.
Оскільки ми вказали 3 як параметр об’єкта PrintNumber(), self.max ініціалізується значенням 3. Отже, цикл зупиняється на 3. Коли self.num досягає значення self.max, яке дорівнює 3, функція next() генерує виняток StopIteration.
Приклад №3: Функція iter() із параметром sentinel
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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) |
Результат:
2
4
8
Тут ми не реалізували умову StopIteration. Натомість ми використали функцію iter() з параметром sentinel для завершення ітерації:
|
1 |
my_iter = iter(DoubleIt(), 16) |
Значення параметра sentinel дорівнює 16, тому програма зупиниться, коли значення методу __next__() дорівнюватиме цьому числу. На даному етапі програма автоматично згенерує виняток StopIteration.
