PyThrone
15 subscribers
12 photos
Download Telegram
Что выведет этот код?

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
В данном случае будет выведено None, потому что оператор and возвращает первое ложное значение, которое встречает на своём пути, или последнее значение, если такого нет.

В данном случае первое значение None является ложным, поэтому and сразу возвращает его, не проверяя следующее значение False.
👍2🔥1
Как можно вызывать эту функцию?

Правильный ответ # 1 и # 2.

arg1 - только позиционный аргумент.
arg2 - можно передать как поцизионно, так и по имени.
arg3 - только как именованный.

В списке аргументов функции:
- все аргументы которые стоят до / должны передаваться как позиционные.
- все аргументы после * должны передаваться как именованные.
- после / и до * можно передавать как если бы не было этих символов.
👍10