sys.stdout.write和print有什么区别?

515 投票
16 回答
774302 浏览
提问于 2025-04-16 01:23

有没有一些情况,使用 sys.stdout.write() 比使用 print 更好呢?

(举个例子:性能更好;代码更容易理解)

16 个回答

52

这里有一些示例代码,来自马克·卢茨的书《学习Python》,这段代码可以帮助你理解你的问题:

import sys
temp = sys.stdout                 # store original stdout object for later
sys.stdout = open('log.txt', 'w') # redirect all prints to this log file
print("testing123")               # nothing appears at interactive prompt
print("another line")             # again nothing appears. it's written to log file instead
sys.stdout.close()                # ordinary file object
sys.stdout = temp                 # restore print commands to interactive prompt
print("back to normal")           # this shows up in the interactive prompt

用文本编辑器打开log.txt文件,你会看到以下内容:

testing123
another line
187

print 首先会把你要打印的东西转换成字符串(如果它还不是字符串的话)。如果这个东西不是在行的开头,它还会在前面加一个空格,最后会在后面加一个换行符。

而使用 stdout 的时候,你需要自己把要打印的东西转换成字符串(比如可以用 "str" 函数),而且不会自动加换行符。

所以

print 99

其实和下面这个是一样的:

import sys
sys.stdout.write(str(99) + '\n')
367

print 其实就是一个简单的工具,它会把你输入的内容格式化一下(你可以修改这个格式,但默认情况下,它会在每个参数之间加一个空格,最后再换行),然后调用一个特定对象的写入功能。默认情况下,这个对象是 sys.stdout,不过你也可以用“尖括号”形式传入一个文件。比如:

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 变成了一个函数,但你仍然可以通过 file 参数传入其他的对象,而不仅仅是 sys.stdout

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 函数和 print 语句之间有一点小区别(更广泛地说,函数和语句之间也有区别)。

如果在评估参数时发生错误:

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

撰写回答