是否存在sys.stdout.write()比print更可取的情况?
(例子:更好的性能;更有意义的代码)
是否存在sys.stdout.write()比print更可取的情况?
(例子:更好的性能;更有意义的代码)
当前回答
在Python 2中,如果你需要传递一个函数,那么你可以将os.sys.stdout.write赋值给一个变量。你不能这样做(在REPL)打印。
>import os
>>> cmd=os.sys.stdout.write
>>> cmd('hello')
hello>>>
这和预期的一样。
>>> cmd=print
File "<stdin>", line 1
cmd=print
^
SyntaxError: invalid syntax
这是行不通的。印刷是一种神奇的功能。
其他回答
在Python 3中,print和sys.stdout.write to指出的区别还在于在终端中执行时返回的值。在Python 3中,sys.stdout.write返回字符串的长度,而print只返回None。
因此,例如,在终端中以交互方式运行以下代码将打印出字符串后跟它的长度,因为当以交互方式运行时,长度将被返回并输出:
>>> sys.stdout.write(" hi ")
hi 4
我的问题是,是否存在sys.stdout.write()优于print的情况
如果您正在编写一个既可以写入文件又可以写入标准输出的命令行应用程序,那么它就很方便。你可以这样做:
def myfunc(outfile=None):
if outfile is None:
out = sys.stdout
else:
out = open(outfile, 'w')
try:
# do some stuff
out.write(mytext + '\n')
# ...
finally:
if outfile is not None:
out.close()
这确实意味着不能使用with open(outfile, 'w')作为out:模式,但有时这样做是值得的。
我的问题是是否有 在这些情况下 Sys.stdout.write()更可取 打印
有一天,在完成一个脚本的开发后,我把它上传到unix服务器上。我的所有调试消息都使用打印语句,这些语句不会出现在服务器日志中。
在这种情况下,您可能需要sys.stdout.write来代替。
其中一个区别如下,当试图将一个字节打印为其十六进制外观时。例如,我们知道十进制值255是十六进制的0xFF:
val = '{:02x}'.format(255)
sys.stdout.write(val) # Prints ff2
print(val) # Prints ff
是否存在sys.stdout.write()比print更可取的情况?
我发现在多线程情况下,stdout比print工作得更好。我使用队列(FIFO)来存储要打印的行,并且在打印行之前保持所有线程,直到打印队列为空。即便如此,使用print我有时会在调试I/O上丢失最后的\n(使用Wing Pro IDE)。
当我在字符串中使用带\n的std.out时,调试I/O格式正确且\n被准确地显示出来。