Найти тему
Easy Python

Задача 8. Применение атрибута flush в функции print. Python

Всем привет! Сегодня у нас небольшая задачка, которая показывает работу атрибута flush

Задача:

Рассмотреть приведённые ниже 2 кода и разобраться в результатах выполнения:

Рис. 1
Рис. 1
Рис. 2
Рис. 2

Решение:

На первом рисунке в строке 1 мы запускаем модуль time, который позволит нам наглядно увидеть разницу в исполнении кода с применением и без применения атрибута flush функции print .

На рис. 1 в строке 2 функция print не имеет прописанного атрибута flush (а по умолчанию он имеет значение False). Но при этом мы прописали атрибут end равным пробелу ( end = ‘ ‘)

И когда мы запустим этот код, то получим результат в консоли через 5 секунд, т.е. когда программа закончит свою работу. До того момента, когда программа  закончит работу и нет перевода на новую строку, буферизированный текст хранится в памяти вывода.

На рис. 2 видно, что было прописано значение атрибута flush («смывать, очищать» - с английского) равным True, что означает НЕМЕДЛЕННЫЙ ПРИНУДИТЕЛЬНЫЙ ВЫВОД, сбрасывание текста через поток вывода (очистка буфера) еще  до того, как программа отработает весь код.

Это может, например,  использоваться в многопоточных сетевых программах, где несколько потоков работают в фоновом режиме, а информация для вывода, отображается в режиме реального времени

Попробуйте набрать эти два примера и посмотрите, как это работает.

Задача решена!

И напоследок рассмотрим три последовательных примера кода, которые тоже наглядно покажут вам работу атрибута flush:

Рис. 3
Рис. 3

Код на рисунке 3 не имеет каких либо прописанных вручную атрибутов, а значит по умолчанию его атрибуты:

sep = ‘ ‘ (пробел)

end = ‘\n’ (перевод на новую строку)

file = sys.stdout (стандартный поток вывода) . Я использую VS code и соответственно функция print по умолчанию выводит мне его на экран TERMINAL данного редактора.

flush = False (буферизированный вывод не очищается до тех пор пока не обнаружит конец строки или программа не отработает)

Получим вывод каждого символа искомой строки через пробел (т.к. sep равно пробел = ‘ ‘ ), в отдельной строке (т.к end = ‘\n’) через каждые 1 секунду вот в таком виде:

Рис. 4
Рис. 4

Теперь пропишем в этом коде в функции print атрибут, равный пробелу end  = ‘ ‘:

Рис. 5
Рис. 5

Получим в результате все символы в одной строке, но только все и сразу  (а не через каждые одну секунду) после того, как программа полностью отработает. Это произошло, потому, что flush = False по умолчанию и сбросил текст в поток тогда, когда программа полностью отработала. Т.е. все то время пока программа работала буфер накапливал итоговые значения, т.к. не было перевода строки. А когда программа закончила свою работу, он все вместе вывел на экран через пробел (т.к. end = ‘ ‘ (пробел):

Рис. 6
Рис. 6

Теперь пропишем атрибут flush = True в этом коде:

Рис. 7
Рис. 7

Он выведет все также в одной строке и через пробел, НО через каждые 1 секунду:

Рис. 8
Рис. 8

Это произошло потому, что атрибут flush получил значение True, которое требует немедленного вывода текста в поток (как только получил значение, сразу же и вывел его на экран).

Подведем итоги:

1. Кратко познакомились с примером применения атрибута flush функции print. Он появился в Python начиная с версии Python 3.3

2. Узнали, что текст для вывода хранится какое-то время до вывода в буфере, до тех пор, пока программа не отработает полностью или пока не будет произведён перевод строки (‘\n’) в функции print. Если вывод производится в какой-либо указанный атрибутом file файл, по умолчанию, он сбросит туда текст, после закрытия файла.

3. Он предназначен для немедленной очистки памяти буфера и немедленного сброса текста в указанное место еще до того, как программа закончит свое исполнение.

Понравилась статья, ставьте лайк!

Есть вопросы? Пишите и общайтесь друг с другом в комментариях!

Предыдущие статьи:

Задача 1. Установка интерпретатора Python и среды программирования VS Code на Windows

Задача 2. Написать программу вывода на экран. Функция print()

Задача 3. Python. Используя два числовых значения провести операцию сложения и вывести результат

Задача 4. Python. Строковое и числовое представление данных на экран. str() и int()

Задача 5. Применение атрибута sep в функции print. Python

Задача 6. Применение атрибута end в функции print. Python

Задача 7. Применение атрибута file в функции print. Python

Теги:

#Python, #программирование, #задачи,  #print(), #синтаксис print, #атрибут flush, #flush