python中打印的括号

时间:2012-11-16 10:57:33

标签: python printing

我在python中有这行代码

print 'hello world'

反对

print ('hello world')

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

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

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

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

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

它有效!

3 个答案:

答案 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)。

Backwards Compatibility

  

本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?