使用sys.stdout.write和print打印变量时的区别

3

我希望了解sys.stdout.writeprint方法(或函数)之间的区别。例如,下面的代码将打印11。

a = str(1)
sys.stdout.write (a)

但是这将打印出1。
a = str(1)
print (a)

为什么会有这样的差异?有没有办法让sys.stdout.write()输出1而不是11?谢谢!

1
我做错了什么吗? - Rakanoth
4个回答

8
sys.stdout.write()的返回值是写入的字节数。在这种情况下,返回值为1,并且会在交互式解释器提示符上打印出任何输入表达式的结果。
例如:
>>> import sys
>>> sys.stdout.write("foo")
foo3

如果您想隐藏它,可以这样做:
>>> nbytes = sys.stdout.write("foo\n")
foo

4
看起来sys.stdout.write返回它所写的值。因此它不会打印11,而是打印1并返回1。但是,如果你在交互式解释器中执行此操作,则解释器会打印表达式的返回值,这又是1
如果不在交互式解释器中执行(即将代码放入文件并运行),则不会打印第二个1。在交互式解释器中,可以通过赋值结果来抑制它:
x = sys.stdout.write(a)

2
为了解释它们之间的区别,您需要了解打印功能 -
print(*objects, sep=' ', end='\n', file=sys.stdout)

Print函数接受输入的对象,并将其写入文件参数中,默认情况下为sys.stdout,并返回Nothing。它使用文件参数对象的write函数,并将end参数作为最后一个字符打印。这意味着它默认使用sys.stdout.write将语句打印到屏幕上。Sys.stdout.write返回字节数作为返回值。Print是在sys.stdout.write之上的一些包装。


2
我猜你的下一个执行应该对写入和打印都产生相同的结果。
由于第一次没有打印并且停留在stdout中,它会同时打印所有stdout,即来自先前执行的1个和当前执行的1个。
只需尝试并让我知道 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接