Развёрнутое пояснение:
1. Создаётся список batch с двумя разными словарями.
2. Вызов enrich(batch) возвращает генератор, тело которого пока не выполняется.
3. next(stream) запускает цикл, обрабатывает первый словарь, добавляет в него ключ status и приостанавливается на yield. Первый словарь уже изменён.
4. list(stream) возобновляет генератор, дообрабатывает второй словарь, добавляет тот же ключ и завершает итерацию.
5. print(batch) выводит исходный список, в котором теперь оба словаря содержат status со значением ok.
Почему это важно: ленивые пайплайны часто используются для обработки больших потоков данных, и мутация исходных объектов внутри генератора — распространённая ошибка. Если потребитель прочитает только часть потока или если несколько задач делят один источник, состояние исходных записей окажется непредсказуемым. Безопаснее возвращать копии или использовать неизменяемые структуры данных.
Post #4876
502
Python: задачки и вопросы
- ✍ 1