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