То, что вы видите, представляет собой представление из my_string
, созданное его методом __repr__()
. Если вы его распечатаете, вы увидите, что на самом деле у вас есть одна обратная косая черта, как вы и предполагали:
>>> print(my_string)
why\does\it\happen?
В приведенной ниже строке есть три символа , а не четыре :
>>> 'a\\b'
'a\\b'
>>> len('a\\b')
3
Вы можете получить стандартное представление строки (или любого другого объекта) с помощью встроенной функции repr()
:
>>> print(repr(my_string))
'why\\does\\it\\happen?'
Python представляет обратную косую черту в качестве \\
, потому что обратная косая черта является escape-символом - например, \n
представляет новую строку, а \t
представляет вкладку.
Иногда это может вам помочь в проблему:
>>> print("this\text\is\not\what\it\seems")
this ext\is
ot\what\it\seems
Из-за этого должен быть способ сказать Python, что вы действительно хотите, чтобы два символа \n
, а не новая строка, и вы делаете что, преодолевая обратную косую черту, с другой:
>>> print("this\\text\is\what\you\\need")
this\text\is\what\you\need
Когда Python возвращает представление строки, он играет безопасно, избегая всех обратных косых черт (даже если они иначе не были бы частью побега последовательность), и это то, что вы видите. Однако сама строка содержит только одну обратную косую черту.
Более подробную информацию о строковых литералах Python можно найти по адресу: литералы String и Bytes в документации Python.