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?")

直到系统暂停后它才打印我的消息。为什么在暂停之前没有打印“is”?似乎 print() 函数有一些我不理解的隐藏工作原理。有人有一些解释吗?

4

1 回答 1

1

您的输出正在被缓冲:输出一直保持到发送换行符为止,因为一次打印一行比一次打印一个字符更有效。

如果你愿意,你可以sys.stdout.flush()在每个之后放置。其他解决方案在这里。就个人而言,我有点喜欢包装纸。您可以将它与在一个块中设置和恢复的上下文管理器相结合,以获得最大的 Pythonicity。print()stdoutwith

于 2013-11-01T15:52:03.523 回答