我在python中有这行代码
print 'hello world'
反对
print ('hello world')
有人可以告诉我两者之间的区别吗?
我在一个简单的代码中使用它
var = 3
if var > 2:
print 'hello'
它无法严格检查 var 的所有值。但是如果我将代码定义为
var = 3
if var > 2:
print ('hello')
有用!
对于 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 相同的行为,并且再次需要括号。
您应该阅读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
我在这里搜索正则表达式来转换这些语法。这是我对其他人的解决方案:
在旧的 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"?