2013-11-01 105 views
1

我想一次打印一行中的字符。这段代码最终要做的是每次只读一个字符(每个字符之间都有一个暂停,所以我知道它正在迭代字符),然后当它完成该行时,它会将所有字符打印在一旦。在循环中一次只打印一个字符

for line in lines: 
    for ch in line: 
     print(ch, end = ' ') 
     os.system("pause") 

但是,如果我这样做:

for line in lines: 
    for ch in line: 
     print(ch, end = '\n') #same effect as print(ch) 
     os.system("pause") 

它将打印一个字符用一个换行符,然后系统暂停。

为什么它在第一种情况下打印不正确,但在第二种情况下打印?

另外,我刚跑了随机测试:

print ("is", end=' ') 
os.system("pause") 
print("newline?") 

它没有打印我的消息,直到系统暂停后。为什么暂停之前不打印“是”?似乎有print()函数的一些隐藏的工作比我不明白。任何人都有一些解释?

回答

1

您的输出被缓冲:输出一直保留到发送换行符为止,因为一次打印一行文本比一次打印一个字符效率更高。

如果您愿意,您可以在print()之后加sys.stdout.flush()Other solutions here。我个人有点像包装。你可以将它与一个上下文管理器结合起来,在with块中设置和恢复stdout,以获得最大的Pythonicity。

+0

先生,您是一位绅士和学者。我在运行随机测试后发现有关于缓冲区的信息。感谢您的回答,我会尽快将其标记出来。 –