在Python 2.7中,我应该使用print语句还是函数?

5
要让我在Python 2.7.10中编写的简单脚本具备未来的可移植性,我应该使用print函数而不是语句吗?以防我想在只有Python 3的其他计算机或在线IDE上测试它们。什么是同时适用于两个或最常见Python版本的最佳方式?
这是我学习的第一种编程语言,所以我不确定差异。现在,我有一个固定变量,我输入'2'或'3',然后代码中的if语句会根据不同版本执行不同的打印函数和连接方法。
--示例--
我现在正在使用的:
print "Hello world!"

但是我应该在两个版本中都使用它吗?
print ("Hello world!")

对我来说,执行__future__导入的主要优点是我不需要学习特殊用途的print语句语法。我编写Py2和Py3代码,虽然我很擅长编写跨兼容性代码或针对特定版本的功能,但使用print语句没有任何好处,它是一堆特殊目的规则和语法的混合,而print函数是一个完全正常的Python函数,不需要特殊的语法。它也可以做更多的事情,但这次次要于“不学习单一目的的特殊语法”。 - ShadowRanger
4个回答

11

Python 2.7.10 没有一个print()函数,除非你导入它。添加括号并不会将其变成函数,它只是指定分组。如果您尝试模拟传递多个对象,它将打印一个tuple

>>> print 1
1
>>> print (1)
1
>>> print 1,2
1 2
>>> print (1,2)
(1, 2)

在你的print语句周围添加括号可能会使你的程序在运行Python 2或3时更加健壮,但任何超过基本用法的操作都会产生意外的结果。 在Python 3中,print (1,2)将产生与Python 2中的print 1,2相同的结果。 如果您想要实际的兼容性,应该导入打印函数(可以在Python 2或3中安全地完成,但只有在Python 2中才会有所不同):

>>> from __future__ import print_function
>>> print (1,2)
1 2

3

如果你想让Python 2的代码更像Python 3,那么可以使用__future__引入:

from __future__ import print_function

然后像在Python 3中一样使用print()即可。

这比仅在print语句上加括号要好得多,因为:

x = 100
print("Results:", x)

这行代码在Python2.x中会打印出("Results:", 100),但是如果使用import或者Python3.x,则会按预期打印Results: 100
然而,如果您只关心可移植性,2to3程序可以非常好地将print语句转换为print()函数调用。
您还可以导入unicode_literalsdivision等来使您代码中的其他部分更像Python 3。 或者您可以立即切换到Python 3。

1
任意一行代码都可以在2.7和3.x版本中使用。
print ("Hello world!")
print("Hello world!")

一个只适用于2.7版本的打印语句的示例如下:
print "Hello world!"

你最好使用括号来未雨绸缪,PEP8格式如下所示,但以下内容需要注意:

print("Hello world!")

在函数和左括号之间不要加空格。
以上内容对于简单的字符串可以正常工作,然而真正的解决方案是像这样从future导入print函数:
from __future__ import print_function

这将使Python 2中的打印成为一个真正的函数,类似于Python 3中的方式。仅仅用括号将事物包围起来会让你遇到一个问题,例如:
print 1,2

vs.

print(1, 2)

Python 2会将后者视为元组,因此您将看到输出结果发生变化,如下所示:

>>> print 1,2 
1 2
>>> print(1,2) 
(1, 2)

5
需要说明一个重要的区别:print(1, 2)print 1, 2 - Andrea Corbellini
我认为Andrea提到的差异非常关键,如果省略它们,这个答案就会非常误导人。 - Dietrich Epp
已更新答案以反映该事项。 - jgritty

1
如果您真的想支持Python 2和3,应该使用print()函数,并通过在文件顶部放置以下内容来强制执行它的未来导入;
from __future__ import print_function

现在,在Python 2中使用print作为语句是一个语法错误。

>>> print ""
  File "<stdin>", line 1
    print ""
           ^
SyntaxError: invalid syntax

你可以访问更高级的print()函数功能,例如:
>>> print(*[1,2,3,4], sep=':', end='!')
1:2:3:4!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接