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.16.x/contrib/iterio/