Функция iter() в Python
iter()Это встроенная функция в Python, используемая для преобразования итерируемого объекта в итератор.
Итератор — очень важная концепция в Python,iter()Он может создать итератор из любого итерируемого объекта, позволяя использоватьnext()функцию для доступа к элементам по одному.
Глоссарий: iter 是 iterator(迭代器)的缩写。
Базовый синтаксис и параметры
Формат синтаксиса
iter(object) iter(object, sentinel)
Описание параметра
- Параметр object:
- Тип: итерируемый объект
- Описание: Объект, который нужно преобразовать в итератор.
- Параметр sentinel(необязательно):
- Тип: произвольное значение
- Описание: Значение sentinel; итерация останавливается при достижении этого значения.
Описание функций
- Возвращаемое значение: Возвращает объект-итератор.
- Особенность: Итератор может перемещаться только вперёд, но не назад.
Примеры
Пример 1: Базовое использование
Пример
# Создать итератор из списка
my_list = [1, 2, 3]
iterator = iter(my_list)
# Использовать next() для получения элементов
print(next(iterator)) # Вывод: 1
print(next(iterator)) # Вывод: 2
print(next(iterator)) # Вывод: 3
# Повторный вызов вызывает StopIteration
# print(next(iterator))
# Также можно перебирать с помощью цикла for
my_list = [1, 2, 3]
for item in iter(my_list):
print(item, end=" ")
# Вывод: 1 2 3
my_list = [1, 2, 3]
iterator = iter(my_list)
# Использовать next() для получения элементов
print(next(iterator)) # Вывод: 1
print(next(iterator)) # Вывод: 2
print(next(iterator)) # Вывод: 3
# Повторный вызов вызывает StopIteration
# print(next(iterator))
# Также можно перебирать с помощью цикла for
my_list = [1, 2, 3]
for item in iter(my_list):
print(item, end=" ")
# Вывод: 1 2 3
Ожидаемый вывод:
1 2 3 1 2 3
Пояснение к коду:
iter()Преобразовать итерируемый объект в итератор.- Итератор можно перебрать только один раз; после того как он исчерпан, его нужно создать заново.
Пример 2: Создание из строк и кортежей
Пример
# Итератор строки
s = "hello"
iterator = iter(s)
print(next(iterator)) # Вывод: h
print(next(iterator)) # Вывод: e
print(next(iterator)) # Вывод: l
# Итератор кортежа
t = (1, 2, 3)
iterator = iter(t)
print(next(iterator)) # Вывод: 1
print(next(iterator)) # Вывод: 2
s = "hello"
iterator = iter(s)
print(next(iterator)) # Вывод: h
print(next(iterator)) # Вывод: e
print(next(iterator)) # Вывод: l
# Итератор кортежа
t = (1, 2, 3)
iterator = iter(t)
print(next(iterator)) # Вывод: 1
print(next(iterator)) # Вывод: 2
Ожидаемый вывод:
h e l 1 2
Пояснение к коду:
- Строковый итератор возвращает по одному символу за раз.
- Итератор кортежа возвращает по одному элементу за раз.
Пример 3: Использование параметра sentinel
Пример
# Создание пользовательского итератора с использованием sentinel
def fibonacci():
n = 0
while True:
yield n
n += 1
if n > 10:
raise StopIteration
# Использование sentinel (остановка при чтении определённого значения)
class ReadUntil:
def __init__(self, data, stop_at):
self.data = data
self.stop_at = stop_at
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index >= len(self.data):
raise StopIteration
value = self.data[self.index]
if value == self.stop_at:
raise StopIteration
self.index += 1
return value
# Создать итератор, остановиться при обнаружении "END"
data = ["a", "b", "c", "END", "d"]
iterator = iter(lambda: ReadUntil(data, "END"), Отсутствует)
for item in iterator:
print(item, end=" ")
# Вывод: a b c
def fibonacci():
n = 0
while True:
yield n
n += 1
if n > 10:
raise StopIteration
# Использование sentinel (остановка при чтении определённого значения)
class ReadUntil:
def __init__(self, data, stop_at):
self.data = data
self.stop_at = stop_at
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index >= len(self.data):
raise StopIteration
value = self.data[self.index]
if value == self.stop_at:
raise StopIteration
self.index += 1
return value
# Создать итератор, остановиться при обнаружении "END"
data = ["a", "b", "c", "END", "d"]
iterator = iter(lambda: ReadUntil(data, "END"), Отсутствует)
for item in iterator:
print(item, end=" ")
# Вывод: a b c
Ожидаемый вывод:
a b c
Параметр sentinel используется для создания настраиваемого поведения итерации, обычно применяется с вызываемым объектом.
Другие расширения
Встроенные функции Python3