23 октября 2019
id 796844862Пример из изучаемой мною книжки
def fibonacci_generator():
a = b = 1
while True:
yield a
a, b = b, a + b
print(a, b) #поможет лучше понять работу
fib = fibonacci_generator()
for i in fib:
if i > 100:
break
else:
print('Generated:', i)
Что в
сумма а+b присаивается к b. a,b = (a=>b), (b=>a+b)
I Спасибо! Я забыл это свойство, думал, просто a какое-то, зачем оно здесь, потом b = b. Теперь я понял. Я почти-почти уже начинаю понимать всё, теперь только осталось разобраться с yield. Я пытаюсь отладывать у себя в голове, но плохо получается. Примерно так размышляю: значит, a и b равны 1, далее строка yield a, тут мы, как сказанно, определили объект-генератор, заморозили и сохранили, не особо понимаю, что это значит. Ладно, из строки a, b = b, a+b заключаем, что, в начале, a = b, то есть a = 1, потом b = a+b, то есть b = 2. У нас и вывод соответствующий. Теперь, что выводится после слова Generated? В первой итерации выводится 1. Значит yield заморозил, сохранил значение переменной a, и функция fibonacci_generator стала содержать в себе значение этой переменной, которое потом присваивается переменной fib, потом итератором for присваивается переменной i, и, наконец, выводится функцией print. Всё так? Пока что это нужно разобрать. Запусти ещё код у себя, чтобы видеть всё.
M
O Изображене это матрица пикселей. Теперь представь, что ты вырезаешь прямоугольник из этой матрицы с шириной начиная от пикселя с индексом y до пикселя с индексом y+h, аналогично длина прямоугольника начинается с пикселя с индексом x и заканчивается пикселем с индексом x+w. Чтоб понять как это реализовано, почитай про магический метод getitem (__getitem__)