是否存在sys.stdout.write()比print更可取的情况?

(例子:更好的性能;更有意义的代码)


当前回答

>>> 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

观察上面的例子:

Sys.stdout.write不会写入非字符串对象,但print会 Sys.stdout.write最后不会添加新的行符号,但print会

如果我们深潜,

sys。Stdout是一个文件对象,可用于print()的输出

如果未指定print()的文件参数,则sys。将使用Stdout

其他回答

在Python 2中。在X中,print语句对你给它的内容进行预处理,将其转换为字符串,处理分隔符和换行符,并允许重定向到文件。Python 3。X将其转换为一个函数,但它仍然具有相同的职责。

sys。Stdout是一个文件或类似文件的类,它有一些方法用于写入它,这些方法接受字符串或沿着这一行的东西。

在某些情况下是否更适合使用sys.stdout.write() 打印吗?

例如,我正在处理一个小函数,它在传递数字作为参数时以金字塔格式打印星星,尽管您可以使用end=""在单独的行中打印来完成这一点,但我使用sys.stdout.write与print配合使用来完成此工作。详细说明此标准输出。在同一行中写入打印,而as 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)
>>> 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

观察上面的例子:

Sys.stdout.write不会写入非字符串对象,但print会 Sys.stdout.write最后不会添加新的行符号,但print会

如果我们深潜,

sys。Stdout是一个文件对象,可用于print()的输出

如果未指定print()的文件参数,则sys。将使用Stdout

至少在一种情况下,您需要sys。Stdout而不是print。

当您希望覆盖一行而不转到下一行时,例如在绘制进度条或状态消息时,您需要在以下内容上进行循环

Note carriage return-> "\rMy Status Message: %s" % progress

由于print添加了换行符,您最好使用sys.stdout。

Print首先将对象转换为字符串(如果它还不是字符串)。如果对象不是行首,它也会在对象前加一个空格,在对象末尾加一个换行符。

当使用stdout时,你需要自己将对象转换为字符串(例如,通过调用"str"),并且没有换行符。

So

print 99

等价于:

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