用Python打印的三种方法 - 何时使用?

Noc*_*wer 8 python printing policy python-3.x

根据蒂姆·彼得斯的说法,"应该有一个 - 最好只有一个 - 显而易见的方法." 在Python中,似乎有三种打印信息的方法:

print('Hello World', end='')
sys.stdout.write('Hello World')
os.write(1, b'Hello World')
Run Code Online (Sandbox Code Playgroud)

问题:是否有最佳实践政策说明何时应在程序中使用这三种不同的打印方法?

Bak*_*riu 7

需要注意的是蒂姆的说法是完全正确的:有只有一个明显的方式做到这一点:print().你提到的另外两种可能性有不同的目标.

如果我们想总结三种选择的目标:

  • print是高级函数,允许您向stdout(或其他文件)写入内容.它提供了一个简单易读的API,有一些关于如何分离单个项目的奇特选项,或者是否要添加或不添加终结符等.这是您大多数时间想要做的事情.

  • sys.stdout.write只是文件对象的一种方法.所以真正的意思sys.stdout是你可以传递它,好像它是任何其他文件一样.当您必须处理期望文件的函数并且希望它直接在stdout上打印文本时,这非常有用.

    换句话说,你根本不应该使用sys.stdout.write.您只需传递sys.stdout给需要文件的代码.

    注意:在python2中,有些情况下使用print 语句产生的代码比调用更糟糕sys.stdout.write.但是,该print功能允许您定义分隔符和终止符,从而避免几乎所有这些极端情况.

  • os.write是写入文件的低级调用.您必须手动编码内容,并且还必须显式传递文件描述符.这仅用于处理由于某种原因无法在更高级别接口之上实现的低级代码.你几乎不想直接调用它,因为它不是必需的,并且API比其他API更差.

请注意,如果您的代码应该记下文件中的内容,那么最好这样做:

my_file.write(a)
# ...
my_file.write(b)
# ...
my_file.write(c)
Run Code Online (Sandbox Code Playgroud)

比:

print(a, file=my_file)
# ...
print(b, file=my_file)
# ...
print(c, file=my_file)
Run Code Online (Sandbox Code Playgroud)

因为它更干燥.使用print你必须file=每次都重复.如果你只需要在代码的一个地方写,但如果你有5/6个不同的写,则更容易直接调用该write方法.