Отображение индикаторов выполнения tqdm для каждой новой строки кода: изучено несколько методов

«tqdm каждая новая строка» — это запрос на объяснение различных методов реализации примеров кода, сопровождаемый библиотекой tqdm, где индикаторы выполнения отображаются для каждой новой строки кода. Ниже я представлю несколько методов с примерами кода для достижения этой функциональности.

Метод 1: перенос функции print()

from tqdm import tqdm
import sys
def tqdm_print(*args, kwargs):
    tqdm.write(*args, kwargs)
    tqdm.refresh()
# Usage:
for i in tqdm(range(10)):
    tqdm_print(f'This is line {i}')

Метод 2: собственный класс-оболочка

from tqdm import tqdm
import sys
class TqdmPrintWrapper:
    def __init__(self, file=sys.stdout):
        self.file = file
    def write(self, message):
        tqdm.write(message, file=self.file)
        tqdm.refresh()
# Usage:
sys.stdout = TqdmPrintWrapper(sys.stdout)
for i in tqdm(range(10)):
    print(f'This is line {i}')

Метод 3: исправление sys.stdout

from tqdm import tqdm
import sys
class TqdmStream:
    @property
    def write(self):
        return tqdm.write
sys.stdout = TqdmStream()
# Usage:
for i in tqdm(range(10)):
    print(f'This is line {i}')

Метод 4: Декоратор

from tqdm import tqdm
def tqdm_decorator(func):
    def wrapper(*args, kwargs):
        tqdm.write(func(*args, kwargs))
        tqdm.refresh()
    return wrapper
# Usage:
@tqdm_decorator
def print_line(line):
    return line
for i in tqdm(range(10)):
    print_line(f'This is line {i}')

Метод 5. Менеджер контекста

from tqdm import tqdm
from contextlib import contextmanager
import sys
@contextmanager
def tqdm_context():
    try:
        original_write = sys.stdout.write
        sys.stdout.write = tqdm.write
        yield
    finally:
        sys.stdout.write = original_write
# Usage:
with tqdm_context():
    for i in tqdm(range(10)):
        print(f'This is line {i}')

Это всего лишь несколько способов достижения желаемой функциональности отображения индикаторов выполнения tqdm для каждой новой строки кода. Вы можете выбрать метод, который лучше всего соответствует вашим потребностям. Поэкспериментируйте с ними и посмотрите, какой из них лучше всего подходит для вашего конкретного случая использования.