Обратная косая черта может использоваться, чтобы следующая кавычка не заканчивала строку:
>>> r'\''
"\\'"
То есть r'foo\'
или r'\'
- это неопределенные литералы.
Обоснование
Поскольку вы специально попросили обосновать это решение по проекту, соответствующие аспекты могут быть следующими (хотя все это, конечно, основано на предположениях):
- Упрощает лексирование для самого интерпретатора Python (все строковые литералы имеют одинаковую семантику: закрывающая кавычка, за которой не следует нечетное число обратных слешей, завершает строку)
- Упрощает лексинг для механизмов подсветки синтаксиса (это веский аргумент, потому что большинство языков программирования не имеют необработанных строк, которые все еще заключены в одинарные или двойные кавычки , а многие механизмы подсветки синтаксиса плохо разбиты, потому что они используют неуместные инструменты, такие как регулярные выражения, чтобы выполнять лексинг)
Итак, да , возможно, есть важные причины, по которым был выбран этот способ, даже если вы с ним не согласны, поскольку считаете, что конкретный вариант использования более важен. Однако это не так по следующим причинам:
- Вы можете просто использовать обычные строковые литералы и избегать обратной косой черты или читать строки из необработанного файла
- Обратная косая черта в строковых литералах обычно требуется в одном из следующих двух случаев:
- вы предоставляете строку в качестве ввода для интерпретатора другого языка, который использует обратную косую черту в качестве символа кавычек, например регулярные выражения. В этом случае вам никогда не понадобится обратная косая черта в конце строки
- вы используете
\
в качестве разделителя пути, что обычно не требуется, поскольку Python поддерживает /
в качестве разделителя пути в Windows и поскольку os.path.sep
.
Решения
Вы можете использовать '\\'
или "\\"
вместо:
>>> print("\\")
\
Или, если вы абсолютно сумасшедший, вы можете использовать необработанный строковый литерал и комбинировать их с обычными литералами только для конечной обратной косой черты или даже использовать разрезание строк:
>>> r'C:\some\long\freakin\file\path''\\'
'C:\\some\\long\\freakin\\file\\path\\'
>>> r'C:\some\long\freakin\file\path\ '[:-1]
'C:\\some\\long\\freakin\\file\\path\\'
Или, в вашем конкретном случае, вы можете просто сделать:
paths = [ x.replace('/', '\\') for x in '''
/bla/foo/bar
/bla/foo/bloh
/buff
/
'''.strip().split()]
Что позволит вам сэкономить время при добавлении дополнительных путей в качестве дополнительного бонуса.