A quest for html.unescape(“ ”)
这是我的代码:
1 2 3 4 5 6 7 8
| import os
import html
a = html.unescape("home - study")
b ="test"
print(a)
s = (a, b)
print(s) |
这就是我的结果:
1 2
| home - study
('home\xa0-\xa0study', 'test') |
为什么结果会这样打印?
默认情况下,打印容器(如tuples、lists等)将使用其项目的repr。(在cpython中,它被选择不实现.__str__,而是让object.__str__填充其插槽。object的__str__将调用tuple.__repr__,然后继续调用它所包含元素的repr。更多信息,请参见PEP 3140。)
对带有转义码的字符串(如\xa0)调用repr实际上不会转义它们:
1 2
| print(repr(a))
'home\xa0-\xa0study' |
要进一步验证,请尝试print(s[0])。通过直接将str对象提供到位置0中,python将调用其__str__并正确地退出十六进制。
- 谢谢你的解释。我现在明白原因了。
- 这个答案似乎意味着行为只是由于实现细节…事实并非如此。预计序列定义了一个__str__方法,在该方法中,内部元素的表示被获取,称为它们的__repr__。实施细节是,他们决定使__str__与__repr__相同,避免明确定义__str__,因为object.__str__只是简单地调用__repr__。有人鼓起勇气试图改变这一点,但被拒绝了。
- @巴库鲁,我明白这意味着什么。修正了一些正文,以明确什么是实现细节的发展,什么不是。没有读过那个PEP,谢谢!