2012-11-02 28 views
0

可能重複:
Syntax error on print with Python 3爲什麼Python中有兩種類型的打印?

我還在學習更多Python的日常生活,我只是想知道爲什麼在Python兩種print。例如:

print 'Hello World!' 
print("Hello World") 

兩者似乎都做同樣的事情,除語法差異之外,兩者之間是否存在任何差異?我的意思是,一種方式是否比另一種方式有優勢?我只是好奇。另外,哪種方式更廣泛使用?或者,如果您更喜歡某種方式,請解釋原因,因爲我想遵循最佳做法。

+0

在Python 3中,'print'不再是一個聲明,而是一個內置函數。然而,「功能樣式」仍然與Python 2兼容,因爲解析器仍然將「打印」字識別爲語句。但是,如果您嘗試傳遞實際屬於Py3K函數的任何參數(特別是在嘗試傳遞關鍵字參數時),結果將會不同,因爲Python 2中會引發SyntaxError,因爲元組聲明可能不包含「foo = bar'語法元素。 –

+0

他們不完全一樣。一個用感嘆號打印,另一個不用:-D。 – mgilson

回答

11

在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,如果您選擇在沒有括號的情況下編寫打印,這並不重要。

1

本來print是一個聲明,但後來變成在Python3的功能。

參見例如here爲什麼這是一個好主意。

1

在python2語法print是一個語句,它可以選擇帶括號。我建議你使用它們,如python3 print成爲需要括號的函數。