python中time.sleep的奇怪打印行为

Sна*_*ƒаӽ 4 python sleep

我试图通过在同一行上每秒打印一个点来创建类似进度的东西.像"钓鱼......"之类的东西.这是我用过的:

import time

print('Fishing', end='')
for i in range(5):
    time.sleep(1)
    print('.', end='')
Run Code Online (Sandbox Code Playgroud)

但它会等待5秒钟并立即打印Fishing.....所有内容.但是当我不使用时end='',它每秒打印一次点,但是在这样的单独行上

Fishing.
.
.
.
.
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 为什么print这样做?
  2. 如何每秒打印一个点,但在同一行?

L3v*_*han 6

  1. 为什么print这样做?

print与您的终端关系不大,而且与您的终端有关.出于性能原因,每次有换行符时,文本只会被"刷新",而不是一次只有一个字符.

  1. 如何每秒打印一个点,但在同一行?

通过每次打印时手动"刷新"标准输出:

import time
import sys

print('Fishing', end='')
sys.stdout.flush()
for i in range(5):
    time.sleep(1)
    print('.', end='', flush=True)  # another way
Run Code Online (Sandbox Code Playgroud)

如果您一直需要这个,您可以定义一个单独的冲洗打印功能:

from functools import partial
myprint = partial(print, end='', flush=True)
myprint('Fishing')
for i in range(5):
    time.sleep(1)
    myprint('.')
Run Code Online (Sandbox Code Playgroud)