2012-07-19 190 views
84

在蟒蛇說,你有串聯字符串和整數蟒蛇

s = "string" 
i = 0 
print s+i 

會給你錯誤 所以你寫

print s+str(i) 

不出現錯誤。

我認爲這是一個笨拙的方式來處理int和字符串連接。 即使Java並不需要顯式強制轉換爲字符串來執行這種排序 的串聯。 有沒有更好的方法來做這種連接,即沒有在Python中進行顯式轉換?

+7

這是因爲Python是強類型(https://en.wikipedia.org/wiki/Strong_typing)語言(東西,谷歌瞭解更多:))。 – mouad 2012-07-19 10:44:58

+3

這會導致含糊不清。 「1」+ 1「,」2「或」11「的結果是什麼?爲什麼? – Buddy 2012-07-19 11:02:25

+1

好友我不確定你在想什麼,但請不要假設。我的問題是連接2個不同的對象類型,我找到了解決方案。我不知道你在python中編程了多少,但是你有沒有試過連接兩個字符串只在其中一個是None類型時纔會出錯?你可以做明確的檢查亞,但這只是額外的代碼。當你需要記錄錯誤時,這種事情是必需的。 – specialscope 2012-09-19 04:48:00

回答

104

現代字符串格式化:

"{} and {}".format("string", 1) 
+2

感謝這個很好的方式來做到這一點。 – specialscope 2012-07-19 10:48:05

+0

只是爲了後代,因爲事情在過去發生了變化,未來可能會發生變化:這是哪個版本的「現代」? – jvriesem 2018-02-09 23:08:36

23

字符串格式化,使用新型.format()方法(使用默認值.format()提供):

'{}{}'.format(s, i) 

或者上了年紀,但 「還在堅持圍繞」,% -formatting:

'%s%d' %(s, i) 

在上面的兩個例子中都有沒有這兩個項目之間的空格連接在一起。如果需要空間,它可以簡單地添加在格式字符串中。

這些提供了一個lot關於如何連接項目,他們之間的空間等的控制和靈活性。關於format specifications see this的詳細信息。

69

沒有字符串格式化:

>> print 'Foo',0 
Foo 0 
+2

這對打印效果很好,但不能作爲字符串分配給變量。它給出了Set對象。 – specialscope 2012-07-19 10:49:31

+1

除非您使用v3'print()'*函數*並設置它的某些參數,否則它還會在兩個項目之間留有額外空白。 – Levon 2012-07-19 10:59:03

10

的Python是一個有趣的語言,而通常有一個(或兩個)「顯而易見」的方式來完成任何給定任務,靈活性依然存在。

s = "string" 
i = 0 

print (s + repr(i)) 

上面的代碼片段是用Python3語法,但印刷後的括號總是允許(可選),直到第3版使他們強制性的。

希望這會有所幫助。

凱特琳