Spec-Zone.ru › Werkzeug 0.15

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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API