Аккуратная итерабельность для чтения буфера в Python.

Недавно я обнаружил одну «фичу» Python, касающуюся iter(). Мы видели эту форму итерабельного чтения файлов миллион раз:

with open('eek.txt', 'rt') as f:
    for line in f:
        # Some super-cool stuff!
Вход в полноэкранный режим Выход из полноэкранного режима

Но!!! Знаете ли вы, что в похожей форме можно читать буферы произвольной длины? Используйте форму вызова iter(object, sentinel) и вы сможете сделать это:

with open('eek.txt', 'rt') as f:
    # Use whatever chunk size you want
    for buff in iter(lambda: f.read(1024), ''):
        # Super-cool stuff using a 1K buffer!!
Войти в полноэкранный режим Выйти из полноэкранного режима

Использование iter(read_chunk, ''), по сути, означает: «Вызывайте read_chunk, пока не получите пустую строку». Это можно сделать и с двоичными файлами. Режим будет 'rb', а сентинел — b''.

Неплохо, да?

Документация по функции iter

Оцените статью
devanswers.ru
Добавить комментарий