最近我不得不关注一个鼓励我使用新式python print()
函数的例子,我只能在from __future__ import print_function
之后访问它。两者之间有哪些主要区别?什么是旧print
,如果不是函数?
答案 0 :(得分:5)
旧print
是一个陈述。它无论如何都不是很糟糕,使用方便,易于打字。然而,使它成为一个功能带来了许多新的功能。
这是Guido自己的一些论据:
print是唯一具有专用语句的应用程序级功能。在Python的世界中,语法通常被用作最后的手段,如果没有编译器的帮助就无法完成某些事情。打印不符合此类例外的条件。
在应用程序开发的某个时刻,人们经常感到需要用更复杂的东西来替换打印输出,比如记录调用或调用其他I / O库。使用print()函数,这是一个简单的字符串替换,今天它是一个混乱添加所有这些括号,并可能转换>>流样式语法。
具有特殊的印刷语法为进化提供了更大的障碍,例如:一个假设的新printf()函数与print()函数共存时并不太远。
如果需要一个不同的分隔符,而不是空格,或者根本不需要空格,则没有简单的方法将print语句转换为另一个调用。此外,没有简单的方法可以方便地使用除空格之外的其他分隔符来打印对象。
如果print()是一个函数,在一个模块中更换它会更容易(只需def print(* args):...)甚至整个程序(例如通过放置一个不同的函数)在内置 .print)。实际上,可以通过使用write()方法编写一个类并将其分配给sys.stdout来实现这一点 - 这不是坏事,但绝对是一个更大的概念上的飞跃,它的工作方式与打印不同。 / p>
来源:PEP 3105
答案 1 :(得分:0)
print
是一个关键字,print()
是一个函数。对于我遇到的几乎所有目的,print(x)
(python 3.x)将像print x
(python 2.x)一样工作。但是,您不能使用逗号来避免再转到新行。相反,您必须使用print(x, end=k)
,其中k
是一个字符串,无论您打印出x
后打印出来的是什么。在大多数情况下,您可以使用k = ''
来避免转到新行。