Este é um tópico muito antigo, mas aqui está uma resposta muito detalhada e um código de exemplo.
\r
é a representação de sequência de retorno de carro do conjunto de caracteres ASCII. É o mesmo que octal 015
[ chr(0o15)
] ou hexidecimal 0d
[ chr(0x0d)
] ou decimal 13
[ chr(13)
]. Veja man ascii
para uma leitura chata. É ( \r
) uma representação bastante portátil e é fácil o suficiente para as pessoas lerem. Simplesmente significa mover o carro na máquina de escrever de volta ao início sem avançar o papel. É a CR
parte CRLF
que significa retorno de carro e avanço de linha .
print()
é uma função no Python 3. No Python 2 (qualquer versão que você esteja interessado em usar), print
pode ser forçado a entrar em uma função importando sua definição do __future__
módulo. O benefício da print
função é que você pode especificar o que imprimir no final, substituindo o comportamento padrão de \n
imprimir uma nova linha no final de cada print()
chamada.
sys.stdout.flush
diz ao Python para liberar a saída da saída padrão , que é onde você envia a saída, a print()
menos que você especifique o contrário. Você também pode obter o mesmo comportamento executando python -u
ou definindo a variável de ambiente PYTHONUNBUFFERED=1
, ignorando as chamadas import sys
e sys.stdout.flush()
. A quantia que você ganha fazendo isso é quase exatamente zero e não é muito fácil de depurar se você esquecer convenientemente que precisa fazer essa etapa antes que seu aplicativo se comporte corretamente.
E uma amostra. Observe que isso funciona perfeitamente no Python 2 ou 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()