是否存在sys.stdout.write()比print更可取的情况?
(例子:更好的性能;更有意义的代码)
是否存在sys.stdout.write()比print更可取的情况?
(例子:更好的性能;更有意义的代码)
当前回答
我的问题是是否有 在这些情况下 Sys.stdout.write()更可取 打印
有一天,在完成一个脚本的开发后,我把它上传到unix服务器上。我的所有调试消息都使用打印语句,这些语句不会出现在服务器日志中。
在这种情况下,您可能需要sys.stdout.write来代替。
其他回答
在Python 3中,print和sys.stdout.write to指出的区别还在于在终端中执行时返回的值。在Python 3中,sys.stdout.write返回字符串的长度,而print只返回None。
因此,例如,在终端中以交互方式运行以下代码将打印出字符串后跟它的长度,因为当以交互方式运行时,长度将被返回并输出:
>>> sys.stdout.write(" hi ")
hi 4
>>> sys.stdout.write(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: expected a string or other character buffer object
>>> sys.stdout.write("a")
a>>> sys.stdout.write("a") ; print(1)
a1
观察上面的例子:
Sys.stdout.write不会写入非字符串对象,但print会 Sys.stdout.write最后不会添加新的行符号,但print会
如果我们深潜,
sys。Stdout是一个文件对象,可用于print()的输出
如果未指定print()的文件参数,则sys。将使用Stdout
我的问题是是否有 在这些情况下 Sys.stdout.write()更可取 打印
有一天,在完成一个脚本的开发后,我把它上传到unix服务器上。我的所有调试消息都使用打印语句,这些语句不会出现在服务器日志中。
在这种情况下,您可能需要sys.stdout.write来代替。
是否存在sys.stdout.write()比print更可取的情况?
我发现在多线程情况下,stdout比print工作得更好。我使用队列(FIFO)来存储要打印的行,并且在打印行之前保持所有线程,直到打印队列为空。即便如此,使用print我有时会在调试I/O上丢失最后的\n(使用Wing Pro IDE)。
当我在字符串中使用带\n的std.out时,调试I/O格式正确且\n被准确地显示出来。
你问,
sys.stdout.write和print的区别是什么?`
我所知道的解释它的最好方法是向您展示如何使用sys.stdout来编写print
下面我提供了三种不同的方法来实现python的print函数:
实现1
import sys
def print(*args, sep=" ", file=sys.stdout, end="\n") -> None:
# implementation One
file.write(sep.join(str(arg) for arg in args))
file.write(end)
实现2
def print(*args, sep=" ", file=sys.stdout, end="\n") -> None:
# Implementation 2
file.write(str(args[0]))
for arg in args[1:]:
file.write(sep)
file.write(str(arg))
file.write(end)
return
实现3
def print(*args, sep=" ", file=sys.stdout, end="\n") -> None:
# implementation 3
it = iter(args)
arg = next(it)
file.write(str(arg))
try:
while True:
arg = next(it)
file.write(sep)
file.write(str(arg))
except StopIteration:
pass
file.write(end)
return None