Это очень старая тема, но вот очень подробный ответ и пример кода.
\r
- это строковое представление Возврат каретки из набора символов ASCII. Это то же самое, что восьмеричное 015
[chr(0o15)
] или шестнадцатеричное 0d
[chr(0x0d)
] или десятичное число 13
[chr(13)
]. Смотри man ascii
для скучного чтения. Это (\r
) - довольно переносимое представление, и его легко читать людям. Это очень просто означает переместить каретку на пишущей машинке полностью назад к началу, не продвигая бумагу. Это CR
часть CRLF
, что означает Возврат каретки и перевод строки .
print()
- это функция в Python 3. В Python 2 (любая версия, которая вас заинтересует), print
можно принудительно ввести в функцию, импортировав ее определение из модуля __future__
. Преимущество функции print
заключается в том, что вы можете указать, что печатать в конце, переопределяя поведение по умолчанию \n
для печати новой строки в конце каждого print()
вызова.
sys.stdout.flush
говорит Python сбросить вывод стандартного вывода , куда вы отправляете вывод с print()
, если не указано иное. Вы также можете получить то же поведение, запустив python -u
или установив переменную среды PYTHONUNBUFFERED=1
, пропустив, таким образом, вызовы import sys
и sys.stdout.flush()
. Сумма, которую вы получаете за это, практически равна нулю и не очень проста в отладке, если вам удобно забыть, что вы должны выполнить этот шаг, прежде чем ваше приложение будет работать должным образом.
И образец. Обратите внимание, что это прекрасно работает в Python 2 или 3.
from __future__ import print_function
import sys
import time
ANS = 42
FACTORS = {n for n in range(1, ANS + 1) if ANS % n == 0}
for i in range(1, ANS + 1):
if i in FACTORS:
print('\r{0:d}'.format(i), end='')
sys.stdout.flush()
time.sleep(ANS / 100.0)
else:
print()