Всем привет! Сегодня у нас небольшая задачка, которая показывает работу атрибута flush
Задача:
Рассмотреть приведённые ниже 2 кода и разобраться в результатах выполнения:
Решение:
На первом рисунке в строке 1 мы запускаем модуль time, который позволит нам наглядно увидеть разницу в исполнении кода с применением и без применения атрибута flush функции print .
На рис. 1 в строке 2 функция print не имеет прописанного атрибута flush (а по умолчанию он имеет значение False). Но при этом мы прописали атрибут end равным пробелу ( end = ‘ ‘)
И когда мы запустим этот код, то получим результат в консоли через 5 секунд, т.е. когда программа закончит свою работу. До того момента, когда программа закончит работу и нет перевода на новую строку, буферизированный текст хранится в памяти вывода.
На рис. 2 видно, что было прописано значение атрибута flush («смывать, очищать» - с английского) равным True, что означает НЕМЕДЛЕННЫЙ ПРИНУДИТЕЛЬНЫЙ ВЫВОД, сбрасывание текста через поток вывода (очистка буфера) еще до того, как программа отработает весь код.
Это может, например, использоваться в многопоточных сетевых программах, где несколько потоков работают в фоновом режиме, а информация для вывода, отображается в режиме реального времени
Попробуйте набрать эти два примера и посмотрите, как это работает.
Задача решена!
И напоследок рассмотрим три последовательных примера кода, которые тоже наглядно покажут вам работу атрибута flush:
Код на рисунке 3 не имеет каких либо прописанных вручную атрибутов, а значит по умолчанию его атрибуты:
sep = ‘ ‘ (пробел)
end = ‘\n’ (перевод на новую строку)
file = sys.stdout (стандартный поток вывода) . Я использую VS code и соответственно функция print по умолчанию выводит мне его на экран TERMINAL данного редактора.
flush = False (буферизированный вывод не очищается до тех пор пока не обнаружит конец строки или программа не отработает)
Получим вывод каждого символа искомой строки через пробел (т.к. sep равно пробел = ‘ ‘ ), в отдельной строке (т.к end = ‘\n’) через каждые 1 секунду вот в таком виде:
Теперь пропишем в этом коде в функции print атрибут, равный пробелу end = ‘ ‘:
Получим в результате все символы в одной строке, но только все и сразу (а не через каждые одну секунду) после того, как программа полностью отработает. Это произошло, потому, что flush = False по умолчанию и сбросил текст в поток тогда, когда программа полностью отработала. Т.е. все то время пока программа работала буфер накапливал итоговые значения, т.к. не было перевода строки. А когда программа закончила свою работу, он все вместе вывел на экран через пробел (т.к. end = ‘ ‘ (пробел):
Теперь пропишем атрибут flush = True в этом коде:
Он выведет все также в одной строке и через пробел, НО через каждые 1 секунду:
Это произошло потому, что атрибут 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