56

我了解语句和表达式之间的区别,并且我了解 Python3 将 print() 变成了函数。

然而,我在各种 Python2.x 解释器上运行了一个用括号括起来的 print() 语句,它运行完美,我什至不必导入任何模块。

我的问题:以下代码是print("Hello SO!")作为 Python2.x 中的语句还是表达式进行评估的?

4

3 回答 3

62

考虑以下表达式:

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

它们是等价的。同理,用一个语句:

statement_keyword("foo")
statement_keyword "foo"

也是等价的。

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

print("Hello","SO!")

你会注意到 python 2 和 python 3 之间的区别。在 python 2 中,(...,...)由于 print 是一个语句,所以它被解释为一个元组,而在 python 3 中,它是一个带有多个参数的函数调用。

因此,要回答手头的问题,除非您(在 python 2.6 中引入),print否则在 python 2.x 中将其评估为语句from __future__ import print_function

于 2012-08-28T15:37:19.117 回答
20

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

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

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

>>> print("Hello", "world")
('Hello', 'world')
>>> from __future__ import print_function
>>> print("Hello", "world")
Hello world
于 2012-08-28T15:38:37.337 回答
2

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

于 2012-08-28T15:32:21.720 回答