在Python2.x中使用print()(函数版本)

rah*_*hmu 49 python printing python-2.x function-call

我理解语句和表达式之间的区别,我理解Python3将print()转换为函数.

但是我在各种Python2.x解释器上运行了一个用括号括起来的print()语句,它运行完美,我甚至不需要导入任何模块.

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

mgi*_*son 50

请考虑以下表达式:

a = ("Hello SO!")
a = "Hello SO!"
Run Code Online (Sandbox Code Playgroud)

他们是等同的.以同样的方式,声明:

statement_keyword("foo")
statement_keyword "foo"
Run Code Online (Sandbox Code Playgroud)

也是等价的.

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

print("Hello","SO!")
Run Code Online (Sandbox Code Playgroud)

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

因此,回答手头的问题,print除非你from __future__ import print_function(在python 2.6中介绍)在python 2.x中作为语句进行评估

  • 在 Python3 中使用 from __future__ import print_function 会造成伤害吗?它不会给出导入错误。 (2认同)
  • @sgoblin——不。`__future__` 模块保证不会从其中删除任何内容。它实际上是 python3.x 上的无操作 (2认同)

eca*_*mur 16

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
Run Code Online (Sandbox Code Playgroud)

  • 这也很有趣.请注意,如果将其放入脚本中,它将失败,因为`__future__`导入必须出现在文件的开头,但是通过一些深入的python魔法,它可以在交互式解释器中工作. (5认同)