Python print()与sys.stdout.write():哪一个和为什么?

Python print()与sys.stdout.write():哪一个和为什么?,python,python-3.x,Python,Python 3.x,我有一个脚本,它使用sys.stdout.write()和sys.stderr.write()创建输出。最近我发布了一些关于脚本其他方面的问题,我注意到发布答案的人似乎更喜欢print('some text',file=sys.stdout)。我对输出的主要关注是,它可以通过shell管道传输到文件中或作为另一个程序的输入。有人能解释一下(或给我一个现有的解释)print()和sys.stdout.write之间的区别,在哪些情况下应该使用它们,以及这些约定的合理性吗?“有人能给我解释一下(或给

我有一个脚本,它使用sys.stdout.write()和sys.stderr.write()创建输出。最近我发布了一些关于脚本其他方面的问题,我注意到发布答案的人似乎更喜欢
print('some text',file=sys.stdout)
。我对输出的主要关注是,它可以通过shell管道传输到文件中或作为另一个程序的输入。有人能解释一下(或给我一个现有的解释)
print()
sys.stdout.write
之间的区别,在哪些情况下应该使用它们,以及这些约定的合理性吗?

“有人能给我解释一下(或给我一个现有的解释)print()和sys.stdout.write之间的区别、应使用它们的情况以及这些约定的合理性?”

我想你听到的关于Python3的print()函数的沉默是因为实际上只有一个区别:用法。让我引用PEP-3105:[]

print()
的签名是:

def打印(*args,sep='',end='\n',file=None)

像这样的电话:

打印(a、b、c,文件=sys.stderr)

将相当于今天的:

打印>>sys.stderr,a,b,c

而可选的sep和end参数分别指定在参数之间和之后打印的内容

softspace功能(当前用于告知print是否在第一项之前插入空格的文件的半机密属性)将被删除。因此,今天的版本不会直接翻译:

打印“a”,打印

不会在“a”和换行符之间打印空格

因此,引用Guido van Rossum在2005年对这个问题的讨论[]:一旦你决定不想在物品之间留有空格,印刷品的易用性就会呈现出明显的非线性;您要么必须切换到使用
sys.stdout.write()
,要么必须收集字符串中的所有项。这不是一个简单的转换,考虑在这个简单的例子中如何去除逗号前面的空格:

如果它是一个内置函数,那么拥有一个内置的伴随函数,该函数在不插入空格和添加换行符的情况下完成了类似的工作,这是合乎逻辑的做法(或者添加关键字参数来控制该行为;但我更喜欢第二个函数);但是只有 按目前的状态打印,您必须切换到

两者都不是很吸引人。(不要告诉我空格没什么大不了的——本例中没有空格,但它们在其他情况下。)


对于一个星期天的早晨,沿着记忆的小路,这是一个很好的问题;为什么会出现这种明显的冗余?因为从pythonical的角度来说,编写更高级的代码更为正确:

python的第七禅:“可读性计数”

可能重复的
print "x =", x, ", y =", y, ", z =", z
print "x = " + str(x) + ", y = " + str(x) + ", z = " + str(z)
print "x = %s, y = %s, z = %s" % (x, y, z)