Python中for循环内time.sleep未按预期工作的问题
解决Python for循环中time.sleep不生效的问题
你的问题出在输出缓冲机制上,Python的print函数默认会缓冲输出内容,当你用end=" "时,输出不会立刻刷新到控制台,而是等缓冲区满或者程序结束才一次性打印,所以看起来sleep没生效。
修复方法
有两种常用方式:
- 在print里加上
flush=True参数,强制刷新缓冲区:
import time as t def main(): a = "hello word" for i in a: t.sleep(0.1) print(i, end=" ", flush=True) main()
- 或者在程序开头手动刷新输出缓冲(适合全局设置):
import sys import time as t sys.stdout.flush() def main(): a = "hello word" for i in a: t.sleep(0.1) print(i, end=" ") main()
原理说明
Python的标准输出(stdout)是行缓冲模式,默认遇到换行符\n才会自动刷新缓冲区。你用end=" "替换了默认的换行符,导致缓冲区一直没触发刷新动作,所有字符都攒到程序结束才一起输出,sleep的暂停效果被掩盖了。加上flush=True会强制每次print后立刻把内容输出到控制台,就能看到逐个字符延迟打印的效果了。
内容的提问来源于stack exchange,提问作者Mayur Kadam
相关产品推荐
相关产品推荐

