是否存在sys.stdout.write()比print更可取的情况?
(例子:更好的性能;更有意义的代码)
是否存在sys.stdout.write()比print更可取的情况?
(例子:更好的性能;更有意义的代码)
当前回答
在Python 3中,print和sys.stdout.write to指出的区别还在于在终端中执行时返回的值。在Python 3中,sys.stdout.write返回字符串的长度,而print只返回None。
因此,例如,在终端中以交互方式运行以下代码将打印出字符串后跟它的长度,因为当以交互方式运行时,长度将被返回并输出:
>>> sys.stdout.write(" hi ")
hi 4
其他回答
当动态打印有用时,例如,在一个较长的过程中提供信息:
import time, sys
Iterations = 555
for k in range(Iterations+1):
# Some code to execute here ...
percentage = k / Iterations
time_msg = "\rRunning Progress at {0:.2%} ".format(percentage)
sys.stdout.write(time_msg)
sys.stdout.flush()
time.sleep(0.01)
在某些情况下是否更适合使用sys.stdout.write() 打印吗?
例如,我正在处理一个小函数,它在传递数字作为参数时以金字塔格式打印星星,尽管您可以使用end=""在单独的行中打印来完成这一点,但我使用sys.stdout.write与print配合使用来完成此工作。详细说明此标准输出。在同一行中写入打印,而as print总是在单独一行中打印其内容。
import sys
def printstars(count):
if count >= 1:
i = 1
while (i <= count):
x=0
while(x<i):
sys.stdout.write('*')
x = x+1
print('')
i=i+1
printstars(5)
Print首先将对象转换为字符串(如果它还不是字符串)。如果对象不是行首,它也会在对象前加一个空格,在对象末尾加一个换行符。
当使用stdout时,你需要自己将对象转换为字符串(例如,通过调用"str"),并且没有换行符。
So
print 99
等价于:
import sys
sys.stdout.write(str(99) + '\n')
在Python 3中,使用sys.stdout进行打印是有正当理由的。写,但是这个原因也可以变成使用sys.stdout.write的原因。
这个原因是,现在print是python3中的一个函数,你可以重写它。所以你可以在一个简单的脚本中到处使用print,并决定这些print语句需要写入到stderr。你现在可以重新定义打印函数,你甚至可以通过使用内置模块改变打印函数全局。偏离了轨道。写可以指定文件是什么,但通过覆盖打印,还可以重新定义行分隔符或参数分隔符。
反之亦然。也许您完全确定写入到stdout,但也知道要将打印更改为其他内容,您可以决定使用sys.stdout。写,并使用打印错误日志或其他东西。
所以,你使用什么取决于你打算如何使用它。打印更灵活,但这可能是使用或不使用它的原因。我还是会选择比较灵活的款式,选择印花。另一个使用印刷版的原因是熟悉。现在更多的人知道你说的print是什么意思,而更少的人知道sys.stdout.write。
至少在一种情况下,您需要sys。Stdout而不是print。
当您希望覆盖一行而不转到下一行时,例如在绘制进度条或状态消息时,您需要在以下内容上进行循环
Note carriage return-> "\rMy Status Message: %s" % progress
由于print添加了换行符,您最好使用sys.stdout。