在函数中打印不换行的功能未按预期工作
我想在终端里创建一个进度条,方法是不断在同一行打印 #
符号。
当我告诉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)