Что выведет этот код?
Iterable - это объект по которому можно пройтись. Для питона это любой объект у которого есть метод
Чтобы преобразовать какой то объект в
Первым делом смотриться метод
Но если у объекта нет метода
В метод
Для чего это нужно?
На самом деле это очень старый механизм и в реальности почти не нужный. Так называемая "legacy feature".
Но может быть полезен, когда у вас есть какой то объект и вы хотите как то проитерироваться по нему.
#iter #getitem
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
Как можно вызывать эту функцию?
Правильный ответ # 1 и # 2.
В списке аргументов функции:
- все аргументы которые стоят до
- все аргументы после
- после
Правильный ответ # 1 и # 2.
arg1
- только позиционный аргумент.arg2
- можно передать как поцизионно, так и по имени.arg3
- только как именованный.В списке аргументов функции:
- все аргументы которые стоят до
/
должны передаваться как позиционные.- все аргументы после
*
должны передаваться как именованные.- после
/
и до *
можно передавать как если бы не было этих символов.👍10