Gre*_*ory 30 python python-3.x
我有一个用sys.stdout.write()和创建输出的脚本sys.stderr.write().最近我发布了一些关于脚本其他方面的问题,我注意到发布答案的人似乎更喜欢print('some text', file=sys.stdout).我对输出的主要关注只是它可以被shell传送到文件或作为另一个程序的输入.有人可以解释(或指导我现有的解释)两者之间的差异,print()以及sys.stdout.write每个应该使用的情况和这些惯例的合理性吗?
roo*_*-11 44
" 有人可以解释(或指导我现有的解释)print()和sys.stdout.write之间的区别,每个应该使用的情况以及这些约定的合理性吗? "
嗯,我猜你听到的关于Python3的print()函数的沉默是因为实际上只有一个区别:用法.让我引用PEP-3105:[ 1 ]
签名print()是:
def print(*args,sep ='',end ='\n',file = None)
像这样的电话:
print(a,b,c,file = sys.stderr)
将等同于今天的:
print >> sys.stderr,a,b,c
而可选的sep和end参数分别指定在参数之间和之后打印的内容.
软件空间功能(当前用于告知打印的文件的半秘密属性是否在第一个项目之前插入空格)将被删除.因此,今天不会有直接的翻译:
打印"a",打印
它不会在"a"和换行符之间打印空格.
因此,引用Guido van Rossum在2005年对这个问题的讨论[ 1 ]:一旦你决定不想在项目之间留出空格,印刷品的易用性就会有明显的非线性; 您必须切换到使用sys.stdout.write(),或者您必须收集字符串中的所有项目.这不是一个简单的转换,考虑在这个简单的例子中删除逗号之前的空格:
Run Code Online (Sandbox Code Playgroud)print "x =", x, ", y =", y, ", z =", z
如果它是一个内置函数,有一个内置的伴随函数,它做了类似的事情,没有插入空格和添加换行符将是合乎逻辑的事情(或添加关键字参数来控制该行为;但我更喜欢一秒钟功能); 但只有目前的印刷品,你必须切换到类似的东西
Run Code Online (Sandbox Code Playgroud)print "x = " + str(x) + ", y = " + str(x) + ", z = " + str(z)
要么
Run Code Online (Sandbox Code Playgroud)print "x = %s, y = %s, z = %s" % (x, y, z)
这两者都不是很吸引人.(并且不要告诉我这些空格没什么大不了的 - 它们不在这个例子中,但它们在其他情况下.)
星期天早上记忆中的好问题; 为何这种明显的冗余?因为编写更高级别的代码在python上更正确:
蟒蛇的第7个禅:"可读性很重要"
| 归档时间: | 
 | 
| 查看次数: | 49118 次 | 
| 最近记录: |