2016-10-09 28 views
1

這是我的代碼:一種html.unescape( 「&NBSP」)尋求

import os 
import html 

a = html.unescape("home - study") 
b = "test" 
print(a) 
s = (a, b) 
print(s) 

這是我的結果:

home - study 
('home\xa0-\xa0study', 'test') 

爲什麼結果打印這樣的嗎?

回答

2

默認情況下,印刷容器,如tupleslists和其他將用自己的物品repr(在CPython的,它被選擇爲不執行<container>.__str__,而是讓object.__str__填充插槽。然後object__str__將調用tuple.__repr__其然後前進到調用the repr of the elements it contains參見PEP 3140更多。)

調用repr與轉義代碼(如\xa0)的字符串會,實際上無法逃脫他們:

print(repr(a)) 
'home\xa0-\xa0study' 

爲了進一步驗證,嘗試print(s[0])。通過直接在位置0中提供str對象,python將調用__str__並正確地轉義十六進制。

+0

謝謝你的解釋。我現在明白了原因。 –

+1

這個答案似乎意味着行爲只是由於實現細節...這不是這種情況。期望序列定義一個'__str__'方法,在該方法中獲得內部元素的表示,調用它們的'__repr__'。實現細節是,他們決定使__str__與__repr__相同,並避免明確定義__str__,因爲object .__ str__只是簡單地調用__repr__。有[PEP](https://www.python.org/dev/peps/pep-3140/)試圖改變這一點,它被拒絕了。 – Bakuriu

+1

@Bakuriu我可以看到這是如何暗示的。修正了一下這個主體,以清楚地說明什麼是實現細節,什麼不是。沒有讀過PEP,謝謝! –