sys.stdout.write()
比print
更好吗?
([示例:更好的性能;更有意义的代码)
print
只是一个薄包装器,用于格式化输入(可修改,但默认情况下在args和换行符之间使用空格),并调用给定对象的write函数。默认情况下,此对象为sys.stdout
,但是您可以使用“ V形”格式传递文件。例如:
print >> open('file.txt', 'w'), 'Hello', 'World', 2+3
参见:https://docs.python.org/2/reference/simple_stmts.html?highlight=print#the-print-statement
在Python 3.x中,print
成为一个函数,但是由于sys.stdout
参数的缘故,仍然可以传递file
以外的内容。
print('Hello', 'World', 2+3, file=open('file.txt', 'w'))
请参见https://docs.python.org/3/library/functions.html#print
在Python 2.6+中,print
仍然是一个语句,但可以与]一起用作函数>
from __future__ import print_function
更新:Bakuriu指出要指出,打印功能与打印语句之间存在微小差异(并且更一般地,功能与语句之间存在差异)。
[在评估参数时出错:
print "something", 1/0, "other" #prints only something because 1/0 raise an Exception
print("something", 1/0, "other") #doesn't print anything. The function is not called
在Python 3中,有充分的理由在sys.stdout.write
上使用print,但是这个原因也可以变成使用sys.stdout.write
的原因。
[例如,当动态打印很有用时,最好是在较长的过程中提供信息:
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(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
观察上面的例子:
其中一个不同之处是,当尝试将字节打印成十六进制外观时。例如,我们知道255
的十进制值为十六进制形式的0xFF
:
val = '{:02x}'.format(255)
sys.stdout.write(val) # prints ff2
print(val) # prints ff
print
首先将对象转换为字符串(如果还不是字符串)。如果它不是行的开头,而不是换行符,它将在对象之前放置一个空格。
我的问题是是否在那里在某些情况下
sys.stdout.write()
比
以下是一些示例代码,这些代码基于Mark Lutz所著的Learning Python
在至少一种情况下,您需要sys.stdout
而不是打印。
我的问题是,是否存在
sys.stdout.write()
优于
在2.x版本中,print
语句将对提供的内容进行预处理,将其转换为字符串,处理分隔符和换行符,并允许重定向至文件。 3.x将其转换为功能,但仍具有相同的职责。
在某些情况下,sys.stdout.write()比打印吗?
在某些情况下sys.stdout.write()更适合打印吗?