2013-06-26 42 views
3

我做了以下內容:打印()不是串聯成一個字符串

print('Sent email', i+1) 

但是,它不打印Sent email 1如我期望的,它打印而不是一個列表:

('Sent email', 1) 

爲什麼它沒有將兩個參數連接成單個字符串?

編輯:我使用Python 3.3.2在Windows

>>> import sys;print(sys.version) 
3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:06:53) [MSC v.1600 64 bit (AMD64)] 
+1

之前我沒有提到這一點,但我使用Python 3.3.2。另外'print()'語法顯然也在2.7 –

+2

py3中有效?你確定?什麼'import sys; print(sys.version)'說? – georg

+0

@ thg435我編輯了我的問題以包含您的請求的結果。 –

回答

4

print是py2.x中的一個聲明:

>>> i =0 
>>> print 'Sent email', i+1 
Sent email `1 

在其周圍添加()實際上會打印一個元組。

您還可以導入py3.x print功能:

>>> from __future__ import print_function 
>>> print ('Sent email', i+1) 
Sent email 1 
+0

我使用Python 3.3.2,所以這不適用於我。 –

+0

@RobertDailey你說的話在py3.x中是不可能的,除非你做了這樣的事情:'print((''Sent email',i + 1))' –

+2

標記你的答案,因爲我發現即使我不告訴它,仍然爲Python 2.7.5(也在我的系統上)安裝了愚蠢的「寄存器擴展」,所以我不知道它實際上並沒有進入我的Python3安裝。謝謝! –

3

試試這個:

print('Sent email ' + str(i+1)) 

還是這個,運行時的Python 2.x的:

print 'Sent email', i+1 
+3

沒有必要給我一個多餘的答案。原因是'print()'假設你正試圖打印一個包含一個字符串和一個int的元組,因爲'i + 1'是一個int。如果您將'i + 1'投射到字符串,則逗號的含義會發生變化。 – 2rs2ts

+0

@ 2rs2ts我認爲打印自動轉換類型爲字符串。根據文檔:print依次評估每個表達式並將結果對象寫入標準輸出(參見下文)。如果對象不是字符串,則首先使用字符串轉換規則將其轉換爲字符串。來自:http://goo.gl/KUOgT –

+0

@RobertDailey我認爲在這種情況下,表達式將被視爲一個元組。如果你說'a = 1,2',那麼'打印'你得到'(1,2)',儘管也許我錯了。 – 2rs2ts