TG Telegram Group & Channel
Библиотека Python разработчика | Книги по питону | United States America (US)
Create: Update:

В Python можно спутать две вещи: итерируемые объекты (iterables) и итераторы (iterators).

Итерируемые объекты — это объекты, которые можно перебирать, то есть из них можно извлекать значения по одному, возможно, бесконечно. Обычно итерируемыми объектами являются коллекции, такие как массивы, множества, списки и т. д.

Есть два способа сделать объект итерируемым. Первый — реализовать метод __getitem__:


class Iterable:
def __getitem__(self, i):
if i > 10:
raise IndexError
return i

print(list(Iterable()))


Вывод:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


Второй способ — определить метод __iter__, который возвращает итератор. Итератор — это объект, имеющий метод __next__, который при каждом вызове возвращает следующее значение из исходного итерируемого объекта:


class Iterator:
def __init__(self):
self._i = 0

def __next__(self):
i = self._i
if i > 10:
raise StopIteration
self._i += 1
return i

class Iterable:
def __iter__(self):
return Iterator()

print(list(Iterable()))


Вывод:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


Обычно итератор также имеет метод __iter__, который просто возвращает self. Это позволяет самому итератору быть итерируемым, то есть большинство итераторов также являются итерируемыми объектами.

👉@BookPython

В Python можно спутать две вещи: итерируемые объекты (iterables) и итераторы (iterators).

Итерируемые объекты — это объекты, которые можно перебирать, то есть из них можно извлекать значения по одному, возможно, бесконечно. Обычно итерируемыми объектами являются коллекции, такие как массивы, множества, списки и т. д.

Есть два способа сделать объект итерируемым. Первый — реализовать метод __getitem__:


class Iterable:
def __getitem__(self, i):
if i > 10:
raise IndexError
return i

print(list(Iterable()))


Вывод:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


Второй способ — определить метод __iter__, который возвращает итератор. Итератор — это объект, имеющий метод __next__, который при каждом вызове возвращает следующее значение из исходного итерируемого объекта:


class Iterator:
def __init__(self):
self._i = 0

def __next__(self):
i = self._i
if i > 10:
raise StopIteration
self._i += 1
return i

class Iterable:
def __iter__(self):
return Iterator()

print(list(Iterable()))


Вывод:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


Обычно итератор также имеет метод __iter__, который просто возвращает self. Это позволяет самому итератору быть итерируемым, то есть большинство итераторов также являются итерируемыми объектами.

👉@BookPython


>>Click here to continue<<

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




Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)