gpt4 book ai didi

python - 为什么这些 print() 调用似乎以错误的顺序执行?

转载 作者:太空宇宙 更新时间:2023-11-03 13:15:40 26 4
gpt4 key购买 nike

奇怪的.py:

import sys

def f ():
print('f', end = '')
g()

def g ():
1 / 0

try:
f()
except:
print('toplevel', file = sys.stderr)

Python session :

Python 3.4.2 (v3.4.2:ab2c023a9432, Oct  6 2014, 22:16:31) [MSC v.1600 64 bit (AM
D64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import weird
toplevel
f>>>

为什么“toplevel”在“f”之前打印?

如果删除 end = ''file = sys.stderr,则不会发生这种情况。

最佳答案

因为 stdout 和 stderr 是行缓冲的。它们缓冲字符并且仅在您有完整的行时刷新。

通过设置 end='',您可以确保没有完整的行,并且缓冲区不会被刷新,直到 稍后 Python 交互式解释器输出 >>> 并显式刷新缓冲区。

如果你删除file=sys.stderr,你会再次输出到sys.stdout,并且你将toplevel\n打印为 print() 添加一个换行符,从而刷新 sys.stdout 缓冲区。

您可以通过将 flush=True 参数设置为 print() 函数(Python 3.3 及更高版本)或调用 sys. stdout.flush().

关于python - 为什么这些 print() 调用似乎以错误的顺序执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31093617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com