2014-11-07 51 views
0

我已經搜索了stackoverflow,我找不到我正在尋找的答案。道歉,如果這聽起來像一個愚蠢的問題,因爲我是一個新手學習Python。花了1小時試圖理解這一點,我無法理解這個概念。不明白%

誰能向我解釋如下:

hilarious = False 
joke_evaluation = "Isn't that joke so funny?! %r" 

print joke_evaluation % hilarious 

hilarious = "False" 
joke_evaluation = "Isn't that joke so funny?!" 

print hilarious + joke_evaluation 

爲什麼你不能合併先用+

是因爲在第二個,他們都是用引號定義的字符串,但在第一個,搞笑= False不是在引號?

+0

的[什麼是百分號在Python 3.1意味着]可能重複(http://stackoverflow.com/questions/961344/what-does-the -percentage-sign-mean-in-python-3-1) – msw 2014-11-07 02:14:33

回答

2

字符串上的%運算符不完全像+運算符那樣是串聯的。

使用%時,實際上是使用右側的值替換%左側的字符串中的佔位符。

所以,你可以有這樣的事情:

"This is my %s string" % "fantastic" 

會產生:

This is my fantastic string 

查看如何你不串聯字符串,而是「插入」到右側的字符串。

查看documentation瞭解更多詳情。

更新:

正如下面的評論中指出,有兩個「問題」與此有關。從Python 2.5開始,這實際上是進行字符串替換的「舊」方式。這些天下面的格式比較好(榮譽給asmacdo

"This is my {adjective} string".format(adjective='fantastic') 

除了在評論(感謝ErlVolton)我應該解釋說,「%S」指的是一個字符串替換。也就是說,放在那裏的值應該是一個字符串。同樣,您可以使用整數替換(「%d」),十進制浮點替換(「%f」),並且與原始問題一樣,可以用「%r」替換布爾值。你也可以做更多的格式化(改變浮點數的小數位數,帶前導零的填充數等),這在文檔中解釋得更好。

最後,值得一提的是,您可以將多個值替換爲一個字符串,但會稍微改變語法。您不需要在%運算符後面有單個值,而需要使用元組。例如:

"this %s substitutes strings, booleans (%r) and an integer (%d)" % ('string', True, 42) 

會產生:

this string substitutes strings, booleans (True) and an integer (42) 
+2

這是正確的,但應該指出的是,除非需要能夠使用2.5,否則這不是執行字符串格式化的首選方式。 「這是我的{形容詞}字符串」.format(形容詞='精彩')是首選。 – asmacdo 2014-11-07 02:18:21

+1

你應該更新你的答案,以解釋格式化也會進行隱式類型轉換,''foo「+ 4'將失敗,其中'」foo%d「%4」不會。 – ErlVolton 2014-11-07 02:33:38

0

在這種情況下,百分號表示printf樣式說明符的開始。當第一個參數是一個字符串時,它使用第二個參數(在這種情況下是一個布爾值)對其進行格式化。

請參閱documentation或查看此question。他們應該瞭解情況。

至於加號,你不能將一個布爾值添加(或連接)到一個字符串。