2015-11-21 3 views
-2

Например:Почему сырая строка выполнения непоследовательно в скобках

a = (r'''\n1''') 

b = (r''' 
2''') 

print(a) 
print(b) 

Выход этого примера заключается в следующем:

\n1 

2 

Это означает, что даже если b должна быть сырой строки, его похоже, не работает, почему это так?

Я также проверил:

if '\n' in b: 
    print('yes') 

Выход этого yes означает, что Ь является строкой, и в самом деле имеет \n строку внутри него.

+1

Почему это непоследовательно? * Escape последовательности * не работают, но фактическая строка новой строки не является escape-последовательности. –

+0

Не используйте строку с тремя кавычками, когда вы не хотите добавлять лишние пробелы, вкладки и символы новой строки. – pythad

+0

Подробнее об этом читайте в документах. https://docs.python.org/2/reference/lexical_analysis.html#string-literals и этот ответ SO http://stackoverflow.com/q/4415259/4099593 –

ответ

1

В синтаксисе необработанных строк escape-последовательности не имеют особого значения (кроме обратной косой черты перед цитатой). Символы \ плюс n образуют два символа в строковом литерале, в отличие от обычного строкового литерала, где эти два символа заменяются символом новой строки.

Фактический символ новой строки, с другой стороны, равен не escape-последовательность. Это просто символ новой строки и включен в строку как таковую.

Сравните это с использованием 1 по сравнению с \x31; последняя является escape-последовательностью для кодового пункта ASCII для цифры 1. В обычном строковый литерал, и даст вам характер 1, в качестве исходного строкового литерала, то последовательность выхода не будет истолковано:

>>> print('1\x31') 
11 
>>> print(r'1\x31') 
1\x31 

Все это не имеет ничего общего с круглыми скобками. Скобки не изменяют поведение исходной строки r'''...'''. точно такая же вещь происходит, когда вы удалите скобки:

>>> a = r'''\n1''' 
>>> a 
'\\n1' 
>>> print(a) 
\n1 
>>> b = r''' 
... 2''' 
>>> b 
'\n2' 
>>> print(b) 

2 
Смежные вопросы