Spec-Zone.ru › Werkzeug 0.16

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/

Spec-Zone.ru

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