6

我在python中有这行代码

print 'hello world'

反对

print ('hello world')

有人可以告诉我两者之间的区别吗?

我在一个简单的代码中使用它

var = 3
if var > 2: 
    print 'hello'

它无法严格检查 var 的所有值。但是如果我将代码定义为

var = 3
if var > 2: 
    print ('hello')

有用!

4

3 回答 3

15

对于 Python 2,它没有任何区别。那里,print是一个陈述,'hello'并且('hello')是它的论点。后者被简化为just 'hello',因此它是相同的。

在 Python 3 中,删除了 print 语句,取而代之的是 print 函数。函数是使用大括号调用的,因此实际上需要它们。在这种情况下,print 'hello'是一个语法错误,而print('hello')调用函数'hello'作为它的第一个参数。

您可以通过显式导入将 print 函数反向移植到 Python 2。为此,将以下内容添加为模块的第一个导入:

from __future__ import print_function

然后,您将在 Python 2 中获得与 Python 3 相同的行为,并且再次需要括号。

于 2012-11-16T11:04:12.170 回答
9

您应该阅读python 3.0 中的新功能

print 语句已被一个函数替换,使用关键字参数替换旧 print 语句 ( PEP 3105 )print()的大部分特殊语法。

向后兼容性

本 PEP 中提议的更改将使今天的大多数印刷声明无效。在 3.0 版中,只有那些偶然在所有参数周围加上括号的语法才会继续是有效的 Python 语法,而其中只有打印单个括号值的语法才会继续做同样的事情。例如,在 2.x 中:

>>> print ("Hello", "world")  # without import
('Hello', 'world')

>>> from __future__ import print_function  

>>> print ("Hello", "world")       # after import 
Hello world
于 2012-11-16T11:01:23.353 回答
1

我在这里搜索正则表达式来转换这些语法。这是我对其他人的解决方案:

在旧的 Python2 示例脚本中运行良好。否则使用 2to3.py 进行额外的转换。

在 Regexr.com 上尝试一下(由于某种原因在 NP++ 中不起作用):

find:     (?<=print)( ')(.*)(')
replace: ('$2')

对于变量:

(?<=print)( )(.*)(\n)
('$2')\n

对于标签和变量:

(?<=print)( ')(.*)(',)(.*)(\n)
('$2',$4)\n

如何用 Python3 的 print("string") 替换 Python2 中的所有 print"string"?

于 2018-12-24T21:51:55.090 回答