Работает ли экранирование по-другому в оболочке Python?(По сравнению с кодом в файле) - PullRequest
0 голосов
/ 18 июня 2019

В оболочке Python 3.7 я получаю некоторые неожиданные результаты при экранировании строк, см. Примеры ниже.Получили те же результаты в оболочке Python 2.7.

Краткое чтение в документации по Python, похоже, говорит о том, что экранирование может быть выполнено в строках, но, похоже, не говорит о том, что его нельзя использовать в оболочке.,(Или я пропустил это.)

Может кто-нибудь объяснить, почему побег не работает должным образом.

Пример первый:

input: >>> "I am 6'2\" tall"

вывод:
'I am 6\'2" tall'

, в то время как >>> print("I am 6'2\" tall")

возвращает (что я ожидал):
I am 6'2" tall

(мне также интересно, как обратная косая черта, в неожиданном результате, заканчивается за 6?)

Другой пример:

input: >>> "\tI'm tabbed in."

вывод: "\tI'm tabbed in."

При печати () вкладка заменяется соответствующей вкладкой.(Невозможно показать это, потому что stackoverflow выглядит как удаление табуляции / пробелов перед строкой, которую я использую внутри блока кода).

Ответы [ 2 ]

2 голосов
/ 18 июня 2019

Обычно ваш терминал вызывает repr магический метод строки, когда вы вводите его в терминал как есть. В то же время, когда вы вызываете print над строкой, она вызывает __str__ метод для нее:

s = "I am 6'2\" tall"
s.__repr__() 
'\'I am 6\\\'2" tall\''
s.__str__()
'I am 6\'2" tall'

Подробнее об этом сравнении этих двух методов см .: str против repr и что SO Разница между __str__ и __repr __? вопрос.

Удачи в будущих приключениях с питоном.

2 голосов
/ 18 июня 2019

Интерактивная оболочка даст вам представление возвращаемого значения вашей последней команды. Он дает вам это значение, используя метод repr(), который пытается дать правильное представление исходного кода значения; то есть то, что вы можете скопировать и вставить в код, как есть.

print, с другой стороны, выводит содержимое строки на консоль, независимо от того, будет ли это действительный исходный код или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...