我了解语句(statement)和表达式(expression)之间的区别,并且知道Python3将print()变成了一个函数。
然而,当我在不同的Python2.x解释器上运行用括号包裹的print()语句时,它都可以完美地运行,而我甚至不需要导入任何模块。
我的问题是:在Python2.x中,下面的代码print("Hello SO!")
被评估为语句还是表达式?
我了解语句(statement)和表达式(expression)之间的区别,并且知道Python3将print()变成了一个函数。
然而,当我在不同的Python2.x解释器上运行用括号包裹的print()语句时,它都可以完美地运行,而我甚至不需要导入任何模块。
我的问题是:在Python2.x中,下面的代码print("Hello SO!")
被评估为语句还是表达式?
考虑以下表达式:
a = ("Hello SO!")
a = "Hello SO!"
它们是等效的。同样地,使用语句:
statement_keyword("foo")
statement_keyword "foo"
也是等价的。
请注意,如果您将打印函数更改为:
print("Hello","SO!")
你会注意到Python 2和Python 3之间有所不同。在Python 2中,(...,...)
被解释为元组,因为“print”是一个语句,而在Python 3中,它是一个带有多个参数的函数调用。from __future__ import print_function
(在Python 2.6中引入)。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
__future__
导入必须出现在文件的开头,但是通过某些深层的Python魔法,在交互式解释器中它可以工作。 - mgilson它仍然被视为语句,你只是打印 ("Hello SO!")
,这只会评估为 "Hello SO!"
,因为它不是元组(如delnan所述)。
("Hello SO!")
恰好等价于"Hello SO!"
- 它不是一个元组。 - user395760("Hello SO!",)
)。请注意,逗号是必需的,即使只有一个元素也是如此。 - mgilson
__future__
模块保证了其中的任何内容都不会被删除。在 Python3.x 中,它实际上是一个无操作(no-op)。 - mgilson