2010-02-01 71 views
1

請遵守以下行爲:當我在Python中打印一個unicode字符串列表時,爲什麼我會得到u「xyz」格式?

a = u"foo" 
b = u"b\xe1r" # \xe1 is an 'a' with an accent 
s = [a, b] 

print a, b 
print s 
for x in s: print x, 

結果是:

foo bár 
[u'foo', u'b\xe1r'] 
foo bár 

當我剛打印兩個值坐在變量ab,我得到了我期待;當我將字符串值放在列表中並打印出來時,我得到不需要的u"xyz"表單;最後,當我用循環打印列表中的值時,我再次獲得第一個表單。有人可以解釋這個看似奇怪的行爲嗎?我知道這可能是一個很好的理由。

回答

7

當你打印一個列表時,你會得到每個元素的repr(),列表並不是真的打印出來的,所以python試圖打印一些代表它的結構的東西。

如果要以任何特定方式對其進行格式化,請明確說明您希望如何格式化它,或者覆蓋它的方法__repr__

0

你得到這個是因爲列表可以包含任意數量的混合類型的元素。在第二種情況下,不是打印unicode字符串,而是打印列表本身 - 這與打印列表內容非常不同。

由於列表中可以包含任何內容,因此您將獲得u'foo'語法。如果您使用的是非Unicode字符串,那麼您將看到'foo',而不僅僅是foo

1

Python中的對象有兩種轉換爲字符串的方式:粗略地說,str()產生人類可讀的輸出,而repr()產生計算機可讀的輸出。當你打印某些東西時,它使用str()。

但是列表的str()使用其元素的repr()。

相關問題