以下两个命令有什么区别?
In [57]: sys.stdout.writelines("hello")
hello
In [58]: sys.stdout.write("hello")
Out[58]: hello5
答案 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
除非有返回值,否则对于单个字符串,writelines
和write
的结果是无法区分的。 writelines
的效率要低得多,因为它有效地将write
分别应用于每个字符。