我想一次打印一行中的字符。这段代码最终做的是一次读取整行一个字符(每个字符之间有一个暂停,所以我知道它正在迭代正确的字符)然后当它完成该行时,它将打印所有字符at at一旦。
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()函数有一些隐藏的工作方式比我不理解。有人有解释吗?
答案 0 :(得分:1)
您的输出正在缓冲:输出一直保持到发送换行符,因为一次打印一行比一次打印一个字符更有效。
如果您愿意,可以在sys.stdout.flush()
之后添加print()
。 Other solutions here。就个人而言,我有点像包装纸。您可以将其与在stdout
块中设置和恢复with
的上下文管理器结合使用,以获得最大的Pythonicity。