python `print` 在循环中不工作
我有多个循环在一起,并且在最里面的循环里有一个睡眠(暂停)指令。比如说:
from time import sleep
for i in range(10):
print i,
for j in range(-5,5):
if j > 0:
print '.',
else:
print 'D',
sleep(1)
print ''
如果你运行这段代码,你可能会期待在每次打印 i
的时候,先暂停 1 秒,然后再打印一个 D
,再暂停,直到结束。
但是结果却不一样,它等了 10 秒,然后一次性打印出整行 0 D D D D D D . . . .
,接着又等着再打印下一行。
我发现打印时末尾的逗号导致了这个问题。我该怎么解决呢?
3 个回答
0
我建议在导入之后,使用下面的代码来覆盖打印功能。
import sys
def print_msg(*args,end='\n'):
for item in args:
sys.stdout.write(str(item)+' ')
sys.stdout.write(end)
sys.stdout.flush()
print = print_msg
3
使用 print <something>,
这个写法的问题在于,它会先把内容放到一个缓冲区里,只有等到准备好要打印的时候才会显示出来。
你可以通过使用 print_function
来解决这个问题,这个功能来自 __future__
模块(它也会和 Python 3 兼容):
from __future__ import print_function
from time import sleep
import sys
for i in range(10):
print(i, end='')
for j in range(-5,5):
if j > 0:
print('.', end='')
else:
print('D', end='')
sys.stdout.flush()
sleep(1)
print('')
17
因为有逗号的存在,输出会一直缓冲,直到遇到一个 \n
。
你应该在每次打印后刷新 stdout
,或者使用 sys.stdout.write
并刷新缓冲区。
定义你的打印方法:
import sys
def my_print(text):
sys.stdout.write(str(text))
sys.stdout.flush()
并在行末打印一个 \n