在python中,圍繞單個文字(或變量)的一組括號不會做任何事情。
1 + (1)
"foo" + ("bar")
有地方,你需要括號 - 例如調用函數:
def foo(arg):
pass
foo("bar")
現在,我們已經設置了,在python2.x,print
是聲明。因此,
a = 1
print("foobar")
print(a)
被翻譯成:
a = 1
print "foobar"
print a
,因爲你只需要圍繞一個 「變量」 括號。
在python 3.x中,print
變成了函數所以你需要括號來實際調用該函數。正因爲如此,很多人會寫出print
括號來表示python2.x和python3.x的兼容性。
然而,這引入了一個小的差異。
print (1,2)
在python2.x將解釋(1,2)
作爲元組。例如:
a = (1,2)
print a
而在python3中。X,它將被解釋爲一個函數調用以2個參數:
print(1,2) #py2x equivalent: print 1,2
要解決,你會經常看到字符串格式化或「插值」凝結2個參數爲1個字符串:
print('{0} {1}'.format(1,2))
或:
print('%d %d'%(1,2))
最後(當我們在談論py2k到py3k兼容性),請注意,如果y ou使用工具2to3
,它會自動將您的打印語句轉換爲打印功能。由於2to3
,如果您選擇在沒有括號的情況下編寫打印,這並不重要。
在Python 3中,'print'不再是一個聲明,而是一個內置函數。然而,「功能樣式」仍然與Python 2兼容,因爲解析器仍然將「打印」字識別爲語句。但是,如果您嘗試傳遞實際屬於Py3K函數的任何參數(特別是在嘗試傳遞關鍵字參數時),結果將會不同,因爲Python 2中會引發SyntaxError,因爲元組聲明可能不包含「foo = bar'語法元素。 –
他們不完全一樣。一個用感嘆號打印,另一個不用:-D。 – mgilson