Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python打印顺序_Python - Fatal编程技术网

Python打印顺序

Python打印顺序,python,Python,这可能是一个愚蠢的问题,但我是编程新手,我有一个递归函数设置,我正试图弄清楚。对于Python中的任何print函数,行是否一定是按照脚本中写入的顺序打印的,或者对于较大的输出,即使print语句稍后出现在代码中(可能是由于某些内存延迟),是否可能先在控制台中打印长度较小的输出 例如: def test_print(): #don't run this, but was meant for scale. Is there any chance the 1 would print b

这可能是一个愚蠢的问题,但我是编程新手,我有一个递归函数设置,我正试图弄清楚。对于Python中的任何print函数,行是否一定是按照脚本中写入的顺序打印的,或者对于较大的输出,即使print语句稍后出现在代码中(可能是由于某些内存延迟),是否可能先在控制台中打印长度较小的输出

例如:

 def test_print():
      #don't run this, but was meant for scale. Is there any chance the 1 would print before the list of lists?
      print([[i for i in range(10000)] for j in range(10000)])
      print(1)

输出中的顺序始终与Python中执行函数的顺序相同。

输出中的顺序始终与Python中执行函数的顺序相同。

print语句按照编写代码的顺序将输出堆积到标准输出中。自上而下。这是不可能的任何其他方式,因为这是代码的解释方式。内存延迟在这里不起任何作用,因为控制台的输出是堆积到stdout中的数据的逐行格式副本。数据写入的顺序无法更改,因此您将保留时间顺序。当然,您可以随时了解打印功能本身的工作原理。但我不建议篡改标准库函数。

打印语句按照编写代码的顺序将输出堆积到标准输出中。自上而下。这是不可能的任何其他方式,因为这是代码的解释方式。内存延迟在这里不起任何作用,因为控制台的输出是堆积到stdout中的数据的逐行格式副本。数据写入的顺序无法更改,因此您将保留时间顺序。当然,您可以随时了解打印功能本身的工作原理。但我不建议篡改标准库函数。

如上所述,
print()
函数按照它们在代码中的顺序执行。但是您自己可以更改希望它执行的顺序,毕竟您有权指示代码执行您想要的任何操作。

如上所述,
print()
函数按照它们在代码中的顺序执行。但您自己可以更改希望执行的顺序,毕竟您有权指示代码执行任何您想执行的操作。

如果您将内容打印到不同的文件描述符,如果它们到TTY的路径不同,则输出可能会以无序的方式结束(使用任何语言,而不仅仅是Python)。在这里,您将两者都打印到stdout,因此可以保证顺序。Python中的行是按照它们编写的相同顺序执行的。您可以重新定义/更改
print
函数以更改其行为。如果您将内容打印到不同的文件描述符,那么如果它们到TTY的路径不同,那么输出可能会出现顺序混乱(使用任何语言,而不仅仅是Python)。在这里,您将两者都打印到stdout,因此可以保证顺序。Python中的行是按照它们编写的相同顺序执行的。您可以重新定义/更改
print
函数以更改其行为。这将很复杂,但在100%的情况下,这并不完全正确。考虑<代码> Python Fo.P.P.E.To.OUT/<代码>打印到STDRR的内容(带有<代码>打印> STDRR、“hello”<代码>在Python 2中,或<代码>打印(“hello”,file = sys .STDRR)< /Python 3中的代码>可以在打印到STDUT的内容之前到达TTY,因为STDUT内容通过管道。但是,如果不使用要写入的文件修改打印,则保证有效。添加标志
flush=True
是否会改变这一点?但这取决于终端。如果您进行了行缓冲并打印出行,您的进程将始终以正确的顺序生成输出。@ReblochonMasque,刷新内容将强制它立即从管道中传出,但不会导致FIFO另一端的
tee
实例立即将其刷新到TTY(只要操作系统对该程序进行调度,该程序仍然会被调度)。@viraptor,一旦您使用异步调度的管道,那就不是真的。
python foo.py>(tee out)2>>(tee err)
在两个文件之间有写入顺序(交错时)这完全是不确定的,即使<代码> TE/<代码>不做任何缓冲(尽可能快地写入内容)。在100%的情况下,这不是真的。请考虑<代码> Python Fo.P.E.ToEdE/<代码> -打印到STDRR的内容(用<代码>打印> STHDER,“hello”<代码>在Python 2中,或<代码>打印(“hello”,file = sys .STDRR)。在Python 3中)可以在内容打印到标准输出之前到达TTY,因为标准输出内容通过管道。但是,如果不使用要写入的文件修改打印,则保证有效。添加标志
flush=True
是否会改变这一点?但这取决于终端。如果对行进行缓冲并打印出行,您的进程将“我将始终以正确的顺序生成输出。@ReblochonMasque,刷新内容会迫使它立即从管道中输出,但不会导致FIFO另一端的
tee
实例立即将其刷新到TTY(无论操作系统何时对该程序进行调度,该程序仍会被调度)”@viraptor,一旦异步调度管道发挥作用,那就不是真的。
python foo.py>(tee out)2>(tee err)
在两个文件之间的写入顺序(交错时)是完全不确定的,即使
tee
不做任何缓冲(尽快写入内容)。