Iter IO
Предупреждение
Устарело начиная с версии 0.15: Будет удалено в версии 1.0.
werkzeug.contrib.iterio
Этот модуль реализует IterIO, который преобразует итератор в объект потока и наоборот. Преобразование потоков в итераторы требует модуля greenlet.
Для преобразования итератора в поток достаточно передать его напрямую в конструктор IterIO. В этом примере мы передаём новый сгенерированный генератор:
def foo():
yield "something\n"
yield "otherthings"
stream = IterIO(foo())
print stream.read() # read the whole iterator
Обратное преобразование работает немного по-другому, поскольку нам необходимо гарантировать, что выполнение кода пока не началось. Вызов IterIO с вызываемым объектом в качестве первого аргумента выполняет две задачи. Сама функция получает объект потока IterIO, который она может обрабатывать. Объект, возвращаемый конструктором IterIO, с другой стороны, является не объектом потока, а итератором:
def foo(stream):
stream.write("some")
stream.write("thing")
stream.flush()
stream.write("otherthing")
iterator = IterIO(foo)
print iterator.next() # prints something
print iterator.next() # prints otherthing
iterator.next() # raises StopIteration
-
class werkzeug.contrib.iterio.IterIO -
Объекты этого класса реализуют интерфейс, совместимый со стандартным Python-объектом
file. Потоки могут быть только для чтения или только для записи, в зависимости от того, как создан объект.Если первым аргументом является итерируемый объект, возвращается похожий на файл объект, который возвращает содержимое итерируемого объекта. В случае пустого итерируемого объекта операции чтения возвращают значение-сентинель.
Если первым аргументом является вызываемый объект, то объект потока будет создан и передан в эту функцию. Однако вызывающий код не получит объект потока, а получит итератор. Функция будет выполняться пошагово, как если бы кто-то перебирал возвращаемый итератор. Каждый вызов
flush()создаст элемент для итератора. Еслиflush()вызывается без каких-либо записей между вызовами, будет возвращено значение-сентинель.Примечание для Python 3: из-за несовместимого интерфейса байтов и потоков необходимо явно задать значение сентениль, которое будет пустой строкой байтов (
b''), если вы ожидаете работать с байтами, иначе конец потока будет помечен неправильным значением сентениль.Добавлена в версии 0.9:
sentinelпараметр был добавлен.
© 2007–2020 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/0.15.x/contrib/iterio/