BOOKPYTHON Telegram 3547
Обычно вам не нужно заботиться об объектах-итераторах; они создаются и используются автоматически конструкциями 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
👍4



tgoop.com/BookPython/3547
Create:
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 разработчика | Книги по питону


Share with your friend now:
tgoop.com/BookPython/3547

View MORE
Open in Telegram


Telegram News

Date: |

More>> Co-founder of NFT renting protocol Rentable World emiliano.eth shared the group Tuesday morning on Twitter, calling out the "degenerate" community, or crypto obsessives that engage in high-risk trading. 1What is Telegram Channels? Telegram has announced a number of measures aiming to tackle the spread of disinformation through its platform in Brazil. These features are part of an agreement between the platform and the country's authorities ahead of the elections in October. Polls
from us


Telegram Библиотека Python разработчика | Книги по питону
FROM American