为什么在Python 2.7中使用print时括号是可选的?
在Python 2.7中,下面这两种写法是一样的
print("Hello, World!") # Prints "Hello, World!"
print "Hello, World!" # Prints "Hello, World!"
但是下面这种写法就不行了
print("Hello,", "World!") # Prints the tuple: ("Hello,", "World!")
print "Hello,", "World!" # Prints the words "Hello, World!"
在Python 3.x中,使用print
的时候必须加上括号,这样它就变成了一个函数;而在2.7中,两种写法都可以用,但结果会不同。关于Python 2.7中的print
,还有什么我需要知道的呢?
另见: 在Python 2.x中,使用关键字参数end=' '时出现SyntaxError的另一种情况,这也是print
处理方式不同的一个例子。
4 个回答
5
在这里,我们遇到了一个有趣的情况,涉及到UTF-8编码。
>> greek = dict( dog="σκύλος", cat="γάτα" )
>> print greek['dog'], greek['cat']
σκύλος γάτα
>> print (greek['dog'], greek['cat'])
('\xcf\x83\xce\xba\xcf\x8d\xce\xbb\xce\xbf\xcf\x82', '\xce\xb3\xce\xac\xcf\x84\xce\xb1')
最后的输出是一个包含十六进制字节值的元组。
5
这其实很简单,跟向前兼容或向后兼容没有关系。
在所有Python 3之前的版本中,print
语句的一般写法是:
print expr1, expr2, ... exprn
(这里每个表达式都会被计算,转换成字符串,然后用空格隔开显示出来。)
但是要记住,把表达式放在括号里,表达式本身还是一样的。
所以你也可以这样写:
print (expr1), (expr2), ... (expr3)
这和调用一个函数没有关系。
112
在Python 2.x中,print
其实是一个特殊的语句,而不是一个函数。
这也是为什么你不能像这样使用它:lambda x: print x
需要注意的是,(expr)
并不会创建一个元组(它的结果就是expr
),而,
才会创建元组。这可能导致在Python 2.7中,print (x)
和print (x, y)
之间的混淆。
(1) # 1 -- no tuple Mister!
(1,) # (1,)
(1,2) # (1, 2)
1,2 # 1 2 -- no tuple and no parenthesis :) [See below for print caveat.]
不过,由于在Python 2.x中,print
是一个特殊的语法语句/语法结构,所以在没有括号的情况下,它会以特殊的方式处理,
,并且不会创建元组。这种对print
语句的特殊处理使得它在有或没有结尾的,
时表现得不同。
祝你编码愉快。
*在Python 2中,print
的行为可以改变为Python 3中的样子:
from __future__ import print_function