在函数中打印不换行的功能未按预期工作

10 投票
3 回答
3989 浏览
提问于 2025-04-16 12:26

我想在终端里创建一个进度条,方法是不断在同一行打印 # 符号。

当我告诉Python不要换行时——在Python 3中使用 print('#', end=''),或者在Python 2中使用 print '#',——它确实按我想的那样打印,但只有在整个函数执行完毕后才会显示出来。例如:

import time

i = 0

def status():
    print('#', end='')

while i < 60:
    status()
    time.sleep(1)
    i += 1

我希望每秒打印一个 #,但实际上并没有。它会在60秒后一次性打印出来。使用 print('#') 则会按预期每秒打印一次。那我该怎么解决这个问题呢?

3 个回答

0

你可以随时使用 strip() 这个函数。

7

你可能需要在每次使用print命令后,清空输出缓冲区。想了解更多,可以查看这个链接:如何清空Python打印的输出?

1

Python会把输出先存起来,直到遇到换行符(或者存满一定的大小),这意味着在遇到换行符\n之前,它不会打印任何东西。这是因为打印的过程在性能上是比较耗费资源的,所以让它先把小块数据存起来,偶尔再打印一次会更好。

如果你想让它立刻打印出来,就需要手动清空这个存储区。这可以通过把flush这个参数设置为True来实现。

import time

word = "One letter at a time"

for letter in word:
    print(letter, end='', flush=True)
    time.sleep(0.25)

撰写回答