我在python中有这行代码
print 'hello world'
反对
print ('hello world')
有人可以告诉我两者之间的区别吗?
我在一个简单的代码中使用它
var = 3
if var > 2:
print 'hello'
它无法严格检查var的所有值。但是,如果我将代码定义为
var = 3
if var > 2:
print ('hello')
它有效!
答案 0 :(得分:12)
对于Python 2,它没有任何区别。在那里,print
是一个语句,'hello'
和('hello')
是它的参数。后者简化为'hello'
,因此它是相同的。
在Python 3中,删除了print语句以支持打印功能。使用大括号调用函数,因此实际需要它们。在这种情况下,print 'hello'
是语法错误,而print('hello')
调用函数'hello'
作为其第一个参数。
您可以通过显式导入将打印功能向后移植到Python 2。为此,添加以下内容作为模块的第一次导入:
from __future__ import print_function
然后,您将在Python 2中从Python 3获得相同的行为,并且再次需要括号。
答案 1 :(得分:7)
您应该阅读what's new in python 3.0:
print语句已替换为
print()
函数, 用关键字参数替换大部分特殊语法 旧的打印声明(PEP 3105)。
本PEP中提出的更改将呈现今天的大部分内容 陈述无效。只有偶然出现括号的那些 围绕他们所有的参数将继续是有效的Python语法 在3.0版本中,只有那些打印单个的 带括号的值将继续做同样的事情。例如, 在2.x:
>>> print ("Hello", "world") # without import
('Hello', 'world')
>>> from __future__ import print_function
>>> print ("Hello", "world") # after import
Hello world
答案 2 :(得分:0)
我在这里搜索正则表达式以转换这些语法。这是我为其他人提供的解决方案:
在旧的Python2示例脚本中运行良好。否则,请使用2to3.py进行其他转换。
在Regexr.com上尝试一下(由于某些原因在NP ++中不起作用):
find: (?<=print)( ')(.*)(')
replace: ('$2')
对于变量:
(?<=print)( )(.*)(\n)
('$2')\n
对于标签和变量:
(?<=print)( ')(.*)(',)(.*)(\n)
('$2',$4)\n
How to replace all print "string" in Python2 with print("string") for Python3?