Я внимательно изучал Справочник по языку Python, для некоторых карточек Anki, которые я пишу. И кажется, что я наткнулся на загадку при переходе по строковым литералам.
См. Здесь: вызов функции print("can't")
возвращает can't
.
Но я не смог найти в документах ничего, что бы предполагало, что это даже возможно!
Рассмотрим этот отрывок из формального определения:
shortstring ::= "'" shortstringitem* "'" | '"' shortstringitem* '"'
longstring ::= "'''" longstringitem* "'''" | '"""' longstringitem* '"""'
shortstringitem ::= shortstringchar | stringescapeseq
longstringitem ::= longstringchar | stringescapeseq
shortstringchar ::= <any source character except "\" or newline or the quote>
longstringchar ::= <any source character except "\">
stringescapeseq ::= "\" <any source character>`
Источник
Как вы можете сказать, последовательность "can't"
представляет собой короткую строку . Это потому, что это группа из нуля или более коротких строковых элементов , окруженных соответствующими группами двойных кавычек.
И коротких строковых элементов может быть короткие строки или escape-последовательности строк.
Поскольку в последовательности "can't"
нет escape-последовательностей строк, давайте рассмотрим короткие строки символов . В определении говорится, что кавычка (') является , а не a коротким символом .
Поскольку кавычка не является коротким символом , имеет смысл, что print('can't')
выдает синтаксическую ошибку. Почему print("can't")
не следует тем же правилам?
Я чувствую, что Справочник по языку Python допустил ошибку здесь. Мысли?