TGViewer
PyThrone PyThrone @pythrone · 13 subscribers
Post #14 222
Что выведет этот код?

Iterable - это объект по которому можно пройтись. Для питона это любой объект у которого есть метод __iter__ или __getitem__.

Чтобы преобразовать какой то объект в list, нужно проитерироваться по объекту, т.е. вызвать iter(iterable).
Первым делом смотриться метод __iter__, если он возвращает iterator, то переберая все элементы итератора строиться list.
Но если у объекта нет метода __iter__, но есть метод __getitem__, то создается iterator на основе этого метода.
В метод __getitem__ по очередно передаются индексы (просто числа) от 0 до момента пока __getitem__ не выбросит ошибку StopIteration или IndexError.

Для чего это нужно?
На самом деле это очень старый механизм и в реальности почти не нужный. Так называемая "legacy feature".
Но может быть полезен, когда у вас есть какой то объект и вы хотите как то проитерироваться по нему.


class Library:
def __init__(self, books: list):
self.books = books

def __getitem__(self, index):
return self.books[index]

for book in Library(["a", "b", "c"]):
print(book)


#iter #getitem
  • 👍 4
  • 🔥 1
More from @pythrone
  1. Mar 10, 2023Как можно вызывать эту функцию? Правильный ответ # 1 и # 2. arg1 - только позиционный аргу…
  2. Mar 9, 2023В данном случае будет выведено None, потому что оператор and возвращает первое ложное знач…
  3. Feb 22, 2023Что выведет этот код? Могло показаться, что выведется словарь с буквами и их повторением в…
  4. Feb 20, 2023Set - это множество, в котором элементы не имеют порядок. Т.е. порядок не гарантируется, н…
  5. Feb 16, 2023Что выведет этот код? Когда мы выполняем операции вида: left + right Вызывается метод left…
  6. Feb 14, 2023Что выведет этот код? hash() - функция, которая возвращает хэш-значение объекта, если объе…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →