我在Python中有这行代码。
print 'hello world'
反对
print ('hello world')
能有人告诉我这两者之间的区别吗?
我在一个简单的代码中使用了它们。
var = 3
if var > 2:
print 'hello'
对于变量的所有值进行严格检查时,它会失败。但是,如果我将代码定义为
var = 3
if var > 2:
print ('hello')
它起作用了!
对于Python 2来说,这没有任何区别。在那里,print
是一个语句,'hello'
和 ('hello')
是它的参数。后者被简化为 'hello'
,因此它们是相同的。
在Python 3中,为了取代print语句,引入了一个print函数。函数需要用括号调用,所以实际上需要使用括号。在这种情况下,print 'hello'
是语法错误,而print('hello')
调用了带有 'hello'
作为第一个参数的函数。
您可以通过显式导入来将打印函数退回到Python 2中。要执行此操作,请将以下内容添加为模块的第一个导入:
from __future__ import print_function
那么在Python 2中,您将获得与Python 3相同的行为,再次需要使用括号。
您应该阅读Python 3.0的新特性:
print语句已被替换为
print()
函数,使用关键字参数来替换旧版print语句的大部分特殊语法(PEP 3105)。
本PEP提出的更改将使大多数现有的print语句无效。只有那些偶然在所有参数周围带有括号的语句才会在3.0版本中继续是有效的Python语法,并且其中只有打印单个括号值的语句将继续执行相同的操作。例如,在2.x中:
>>> print ("Hello", "world") # without import
('Hello', 'world')
>>> from __future__ import print_function
>>> print ("Hello", "world") # after import
Hello world
print ((((('test')))))
中一样被忽略。 - pokeprint('test')
可以正常工作... 抱歉这是我唯一提到的事情。 - Andy Haydenprint('test', 'test')
会返回一个元组。 - Ashwini Chaudharyprint
语句后面表达式的一部分。它们不会被解释为对python
函数的调用。Ashwini非常正确地指出,添加逗号会将其变成一个元组,而不是print
函数的多个参数。 - Martijn Pieters我在寻找正则表达式以转换这些语法时到这里了。这是我为他人提供的解决方案:
适用于旧版Python2示例脚本。否则,使用2to3.py进行其他转换。
在Regexr.com上尝试一下(因某种原因在NP++中无法工作):
find: (?<=print)( ')(.*)(')
replace: ('$2')
对于变量:
(?<=print)( )(.*)(\n)
('$2')\n
对于标签和变量:
(?<=print)( ')(.*)(',)(.*)(\n)
('$2',$4)\n
if
后面的冒号。这意味着代码是在 SO 上匆忙输入的,原始代码的结构可能完全不同。if
的缩进也是无效的 - 必须在打开块的语句后遵循缩进规则。因此,这些代码示例甚至都不接近有效。 - millimoose