在何种情况下,sys.stdout.write()
比print
更优?
(例如:更好的性能;更合理的代码)
os.sys.stdout.write
赋值给一个变量。在REPL中你不能使用print
来做到这一点。>import os
>>> cmd=os.sys.stdout.write
>>> cmd('hello')
hello>>>
>>> cmd=print
File "<stdin>", line 1
cmd=print
^
SyntaxError: invalid syntax
在什么情况下使用sys.stdout.write()比print更好?
例如,我正在编写一个小函数,根据传递的数字以金字塔格式打印星号,尽管您可以使用end=""在单独的一行中打印,但我使用了sys.stdout.write与print协作来实现这个功能。要详细说明,stdout.write会在同一行上打印,而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)
其中一个区别在于,当尝试将一个字节打印成其十六进制形式时。例如,我们知道十进制值为255
的十六进制表示为0xFF
:
val = '{:02x}'.format(255)
sys.stdout.write(val) # Prints ff2
print(val) # Prints ff
write()
没有添加 \n
并返回(交互式 shell 显示)函数的返回值(写入的字符数),十六进制表示或任何其他显示的内容都是无关紧要的。 - Ondrej K.您问道:
sys.stdout.write
和
我知道的最好的解释方法就是向您展示如何用sys.stdout
来实现print
。
下面提供了三种不同的实现python的print
函数的方法:
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)
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
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
sys.stdout.write()
和print
之间的基本区别(以及Python为什么会有两者)是一个非常合理的问题,并且并不需要示例。原帖中并没有说命令语法令人困惑。 - smci