sys.stdout.writelines(“ hello”)和sys.stdout.write(“ hello”)

时间:2018-11-03 00:56:06

标签: python python-3.x

以下两个命令有什么区别?

In [57]: sys.stdout.writelines("hello")                                                                           
hello
In [58]: sys.stdout.write("hello")                                                                                
Out[58]: hello5

1 个答案:

答案 0 :(得分:2)

sys.stdout.writelines接受一个可迭代的字符串,并将它们一次写入一个字符串中。stdout。由于iterable的元素未附加换行符,因此,如果它们尚未包含换行符,则它们似乎将串联在一起。返回值为None

sys.stdout.write接受一个字符串,并将其写入stdout。它返回写入的字符数。

第一个示例(writelines)之所以有效,是因为字符串是字符串的可迭代项。输入中的每个字符都是单独编写的。请注意,由于返回值为Out[57],因此没有None,但是所有字符都已打印。它们是单独编写的,但您不能知道,因为它们之间没有换行符。

第二个示例(write)一次打印整个字符串。由于write也不追加换行符,因此返回值(5)将在此之后立即打印。之所以打印Out[58]是因为在这种情况下返回值为非None

通常,writelines是用来模拟/反转readlines的,因此通常您可以更好地看到它们之间的区别。通常,您会使用列表或类似的可迭代项来调用writelines,但是write仅接受一个字符串(并返回一个值):

>>> sys.stdout.writelines(['hello\n', 'world\n'])
hello
world

>>> sys.stdout.write('hello\n world\n')
hello
world
5

除非有返回值,否则对于单个字符串,writelineswrite的结果是无法区分的。 writelines的效率要低得多,因为它有效地将write分别应用于每个字符。