在Python2.x中使用print()

我理解一个语句和一个expression式之间的区别,我知道Python3把print()变成了一个函数。

然而,我运行了一个print()语句,在各种Python2.x解释器中用圆括号括起来,它运行得非常完美,我甚至不需要导入任何模块。

我的问题是:下面的代码print("Hello SO!")评估为语句或Python2.x中的expression式?

考虑以下expression式:

 a = ("Hello SO!") a = "Hello SO!" 

他们是相同的。 用同样的方式,声明:

 statement_keyword("foo") statement_keyword "foo" 

也是等同的。

请注意,如果您将打印function更改为:

 print("Hello","SO!") 

你会注意到python 2和python 3的区别。用python 2, (...,...)被插入为一个元组,因为print是一个语句,而在python 3中,它是一个带有多个参数的函数调用。

因此,为了回答这个问题,除非你from __future__ import print_function (在python 2.6中引入),否则print被评估为Python 2.x中的语句,

print("Hello SO!")被评估为语句print ("Hello SO!") ,其中print语句的参数是expression式("Hello SO!")

如果您打印多个值,这可能会有所不同; 例如print("Hello", "world")将打印2个元素的元组('Hello', 'world')而不是两个string"Hello""world"

为了兼容Python 3,使用from __future__ import print_function

 >>> print("Hello", "world") ('Hello', 'world') >>> from __future__ import print_function >>> print("Hello", "world") Hello world 

它仍然被评估为一个声明,你只是打印("Hello SO!") ,它只是评估为"Hello SO!" 因为它不是一个元组(如delnan所述)。