Это очень старая тема, но вот очень подробный ответ и пример кода.
\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()