2013-06-01 231 views
1

通過閱讀「瞭解Python的難題」,我試圖修改練習6,以便了解發生了什麼。最初它包含:爲什麼輸出不同?

x = "There are %d types of people." % 10 
binary = "binary" 
do_not = "don't" 
y = "Those who know %s and those who %s." % (binary, do_not) 
print "I said: %r." % x 
print "I also said: '%s'." % y 

,併產生輸出:

print "I also said: %r." % y 

I said: 'There are 10 types of people.'. 
I also said: 'Those who know binary and those who don't.'. 

爲了看到使用%s和%R在上線之間的區別,我取代了它

,現在獲得的輸出:

I said: 'There are 10 types of people.'. 
I also said: "Those who know binary and those who don't.". 

我的問題是:爲什麼現在有雙引號而不是單引號?

回答

6

因爲Python在引用時很聰明。

你問一個字符串表示%r使用repr()),其中介紹的方式,是合法的Python代碼串。當您在Python解釋器中回顯值時,會使用相同的表示法。

由於y包含單引號,因此Python會爲您提供雙引號,無需轉義該引號。

的Python更喜歡使用單引號的字符串表示,並在需要時以避免逃逸採用雙:

>>> "Hello World!" 
'Hello World!' 
>>> '\'Hello World!\', he said' 
"'Hello World!', he said" 
>>> "\"Hello World!\", he said" 
'"Hello World!", he said' 
>>> '"Hello World!", doesn\'t cut it anymore' 
'"Hello World!", doesn\'t cut it anymore' 

只有當我使用這兩種類型的報價,並Python中開始使用轉義碼(\')爲單引號。

+0

很好地解釋和展示 –

+0

謝謝,清楚和直接的答案。現在我發現作者在書中提出了同樣的觀點。 – agtortorella

3

因爲字符串中有單引號。 Python正在補償。

+0

Ignacio,謝謝你的深思熟慮的答案。 – agtortorella

相關問題