为什么Python的for循环要等到迭代结束后才一次性打印所有内容?
问题原因
这是Python标准输出的缓冲区机制导致的:默认终端环境下的标准输出是行缓冲模式,只有满足以下三个条件之一时,缓冲区的内容才会真正输出到终端显示:
- 缓冲区被写满
- 遇到换行符
\n - 程序结束自动刷新
你的代码中print(letter, end='')指定了不输出换行符,所有字符都会暂存在缓冲区中,直到循环结束后执行最后的print()输出换行时,才会一次性把所有缓冲区内容打印出来,就出现了等待很久后突然显示完整内容的情况。
解决方案
方案1:使用print函数的flush参数(推荐,Python3.3及以上版本支持)
直接在打印单个字符时增加flush=True参数,强制每次打印后立即刷新缓冲区:
import time message = "Hello fellow human" interval = 0.1 for letter in message: print(letter, end='', flush=True) time.sleep(interval) print()
方案2:手动刷新标准输出(兼容所有Python版本)
如果使用的Python版本低于3.3,可以手动调用sys.stdout.flush()完成缓冲区刷新:
import time import sys message = "Hello fellow human" interval = 0.1 for letter in message: print(letter, end='') sys.stdout.flush() time.sleep(interval) print()
内容的提问来源于stack exchange,提问作者Tooth Soup
相关产品推荐
相关产品推荐

