Я думаю, вы просто путаете внутреннее представление строки с тем, как она отображается с помощью print
.
Когда вы оцениваете выражение в интерактивном режиме, Python отображает представление результата выражения.
Просто посмотрите это в терминале, используя набор символов Latin1:
>>> t = '\xa3150'
>>> t
'\xa3150'
>>> print t
£150
>>> repr(t)
"'\\xa3150'"
>>> print(repr(t))
'\xa3150'
Аналогично вашему примеру, вы получите правильное отображение, если вы печатаетевозвращаемое значение:
>>> x = price_range("£150 to £199")
Print value £150 to £199
>>> x
'Return value \xa3150 to \xa3199'
>>> print x
Return value £150 to £199
На самом деле цикл eval интерпретатора Python близок к:
while True:
expr = input(">>> ")
print(repr(expr))
(Это действительно намного сложнее из-за EOF и обработки ошибок, ноесли подумать об этом, достаточно понять, что происходит с вашим кодом)