2015-05-10 3 views
3

Я не понимаю, как работают строковые литералы. Я знаю, что при использовании r он игнорирует все специальные функции, например, при выполнении \n он обрабатывает его как \ n, а не как новую строку. но потом я попытался сделать это:Python - Raw String Literals

x = r'\' 

и сказал SyntaxError: EOL while scanning string literal и не '\'

почему? правильно ли я это понял? , а также то, что это объяснение:

print r'\\' # gives '\\' 
print r'\\\' # gives SyntaxError 

ответ

3

Единственный способ вставить одну цитату в строку, начинающуюся с одной кавычки, - это избежать ее. Таким образом, как исходные, так и регулярные строковые литералы позволят экранировать символы кавычек, когда у вас есть необработанная обратная косая черта, сопровождаемая символом кавычки. Из-за требования, чтобы был способ выразить одиночные (или двойные) кавычки внутри строковых литералов, которые начинаются с одиночных (или двойных) кавычек, строковый литерал '\' не является законным, независимо от того, используете ли вы обычный или обычный строковый литерал.

Чтобы получить произвольную строку с нечетным числом обратных косых черт, я считаю, что лучший способ - использовать регулярные строковые литералы. Это происходит потому, что пытается использовать r'\\' будет работать, но это даст вам строку с два обратными косыми чертами вместо одного:

>>> '\\' # A single literal backslash. 
'\\' 
>>> len('\\') 
1 
>>> r'\\' # Two literal backslashes, 2 is even so this is doable with raw. 
'\\\\' 
>>> len(r'\\') 
2 
>>> '\\'*3 # Three literal backslashes, only doable with ordinary literals. 
'\\\\\\' 
>>> len('\\'*3) 
3 

Этого ответ предназначен только в качестве дополнения к другой.

5

В сыре буквальных обратного косых черт избегут кавычки, что определяющая строки.

Котировки строк могут быть экранированы с обратной косой чертой, но обратная косая черта остается в строке; например, r "\" "является допустимым строковым литералом , состоящим из двух символов: обратная косая черта и двойная кавычка; r" \ "- это не допустимый строковый литерал (даже необработанная строка не может заканчиваться нечетным числом обратная косая черта). В частности, необработанная строка не может заканчиваться одиночной обратной косой чертой (так как обратная косая черта избежит следующего символа ). Также обратите внимание, что одна обратная косая черта, сопровождаемая символом новой строки, равна , которые интерпретируются как эти два символа как часть строки , а не как продолжение строки.

С the docs