tg-me.com/BookPython/3547
Last Update:
Обычно вам не нужно заботиться об объектах-итераторах; они создаются и используются автоматически конструкциями for
, list
или другими механизмами, которые выполняют итерацию за вас. Однако в некоторых редких случаях вам может понадобиться получить итератор из итерируемого объекта явно. Правильный способ сделать это — использовать встроенную функцию iter
(которая использует методы __iter__
или __getitem__
объекта для получения итератора):
part_sizes = [3, 2, 5]
iterator = iter(range(100))
result = []
for size in part_sizes:
part = []
for _ in range(size):
part.append(next(iterator))
result.append(part)
assert result == [
[0, 1, 2],
[3, 4],
[5, 6, 7, 8, 9],
]
Забавный факт:
iter
можно использовать совершенно другим способом. Вместо создания итератора из объекта, он также может создавать итератор из функции (или любого вызываемого объекта). Если вызвать iter
с двумя аргументами, первый должен быть вызываемым объектом, а второй — контрольным значением (sentinel). При каждом вызове __next__
созданный итератор будет вызывать переданную функцию без аргументов. Если возвращённое значение равно sentinel
, возбуждается исключение StopIteration
; в противном случае возвращается полученное значение.Обычно это удобно для чтения строк до появления определённого маркера:
In : list(iter(input, 'END'))
a
b
END
Out: ['a', 'b', '']
👉@BookPython
BY Библиотека Python разработчика | Книги по питону
Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283
Share with your friend now:
tg-me.com/BookPython/3547