Перейти к содержимому

Br что это python

  • автор:

Строковые и байтовые литералы

Как строковые, так и байтовые литералы могут быть заключены в соответствующие одинарные кавычки ( ' ) или двойные кавычки ( " ). Они также могут быть заключены в соответствующие группы из трех одинарных или двойных кавычек ( ''' ) или ( """ ), они обычно называются строки в тройных кавычках.

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

Байтовые литералы всегда начинаются с префикса 'b' или 'B' , они производят экземпляр bytes тип вместо str типа. Они могут содержать только символы ASCII. Байты с числовым значением 128 или более должны быть выражены с помощью экранирования \ .

Как строковые, так и байтовые литералы могут дополнительно иметь префикс в виде буквы 'r' или 'R' . Такие строки называются необработанными (сырыми) строками и обрабатывают обратную косую черту как символ литерала. В результате, в сырых строках, экранирование символов Юникода '\U' и '\u' специально ни как не обрабатываются и учитывая, что необработанные литералы Unicode в Python-2.x ведут себя иначе, чем в Python-3.x, синтаксис 'ur' не поддерживается.

Новое в Python-3.3: 'rb' префикс сырых байтов литералов был добавлен как синоним 'br' .

Новое в Python-3.3: Поддержка устаревшего литерала Юникода ( u'value' ) была вновь введена для упрощения обслуживания двух кодовых баз Python-2.x и Python-3.x.

Строковый литерал с префиксом 'f' или 'F' является форматированным строковым литералом. Префикс 'f' может быть объединен с префиксом 'r' , но не может быть объединен с префиксом 'b' или 'u' .

В тройных кавычках допускаются и сохраняются escape-последовательность новой строки \n и кавычки, за исключением того, что три неэкранированные кавычки в строке завершают литерал. "Кавычка" — это символ, используемый для открытия литерала, т. е. либо ' или " .

Если префикс 'r' или 'R' отсутствует, escape-последовательности в строковых и байтовых литералах интерпретируются в соответствии с правилами, аналогичными тем, которые используются стандартом языка C .

В сырой строке кавычки можно экранировать с помощью обратной косой черты, но в результате обратная косая черта останется. Например, строковый литерал r"\"" , состоящий из двух символов — обратной косой черты и двойной кавычки будет интерпретироваться в '\\"' . В сырых строках необработанный литерал не может заканчиваться одним обратным слешем, так как обратный слеш будет экранировать следующий символ кавычки. Также обратите внимание, что escape-последовательность новой строки \n , интерпретируется как \\n , а не как новая строка.

2. Лексический анализ¶

Программа Python читается парсером. Входными данными для синтаксического анализатора является поток токенов, сгенерированный лексическим анализатором. В этой главе описывается, как лексический анализатор разбивает файл на токены.

Python читает текст программы как кодовые точки Юникод; кодировка исходного файла может быть задана объявлением кодировки и по умолчанию используется UTF-8, подробности см. в PEP 3120. Если исходный файл не может быть декодирован, поднимается SyntaxError .

2.1. Строковая структура¶

Программа Python разделена на ряд логических строк.

2.1.1. Логические строки¶

Конец логической строки обозначается символом NEWLINE. Операторы не могут пересекать границы логических строк, за исключением случаев, когда NEWLINE разрешено синтаксисом (например, между операторами в составных операторах). Логическая строка создается из одного или нескольких физических строк, следуя явным или неявным правилам объединения строк.

2.1.2. Физические строки¶

Физическая строка — это последовательность символов, заканчивающаяся последовательностью конца строки. В исходных файлах и строках может использоваться любая из стандартных последовательностей завершения строки в зависимости от платформы: Unix форма с использованием ASCII LF (перевод строки), Windows форма с использованием последовательности ASCII CR LF (возврат с последующим переводом строки) или старая Macintosh форма с использованием символа ASCII CR (возврат). Все эти формы можно использовать одинаково, независимо от платформы. Конец ввода также служит неявным ограничителем для последней физической строки.

При встраивании Python строки исходного кода должны передаваться в API Python с использованием стандартных соглашений C для символов новой строки (символ \n , представляющий ASCII LF, является символом конца строки).

2.1.3. Комментарии¶

Комментарий начинается с символа решетки ( # ), который не является частью строкового литерала, и заканчивается в конце физической строки. Комментарий означает конец логической строки, если не используются правила неявного соединения строк. Комментарии игнорируются синтаксисом.

2.1.4. Декларация кодировки¶

Если комментарий в первой или второй строке скрипта Python соответствует регулярному выражению coding[=:]\s*([-\w.]+) , этот комментарий обрабатывается как объявление кодировки; первая группа этого выражения называет кодировку файла исходного кода. Объявление кодировки должно появиться в отдельной строке. Если это вторая строка, первая строка также должна быть строкой только для комментариев. Рекомендуемые формы выражения кодировки

который также распознается GNU Emacs’ом и:

который располнаётся VIM’ом Брэма Мооленаара.

Если объявление кодировки не найдено, используется кодировка по умолчанию UTF-8. Кроме того, если первые байты файла являются меткой порядка байтов UTF-8 ( b’\xef\xbb\xbf’ ), заявленная кодировка файла — UTF-8 (это поддерживается, среди прочего, Microsoft notepad).

Если кодировка объявлена, имя кодировки должно распознаваться Python. Кодировка используется для всего лексического анализа, включая строковые литералы, комментарии и идентификаторы.

2.1.5. Явное соединение строк¶

Две или более физических строк могут быть объединены в логические строки с использованием символов обратной косой черты ( \ ) следующим образом: когда физическая строка заканчивается обратной косой чертой, которая не является частью строкового литерала или комментария, она объединяется следующим образом, образуя единую логическую строку, удалив обратную косую черту и следующий символ конца строки. Например

Строка, оканчивающаяся обратной косой чертой, не может содержать комментарий. Обратная косая черта не продолжает комментарий. Обратная косая черта не продолжает токен, за исключением строковых литералов (т.е. токены, отличные от строковых литералов, не могут быть разделены по физическим строкам с помощью обратной косой черты). Обратная косая черта недопустима где-либо ещё в строке за пределами строкового литерала.

2.1.6. Неявное соединение строк¶

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

Неявно продолженные строки могут содержать комментарии. Отступ линий продолжения не важен. Допускаются пустые строки продолжения. Между неявными строками продолжения нет токена NEWLINE. Неявно продолженные строки также могут встречаться в строках, заключенных в тройные кавычки (см. ниже); в этом случае они не могут содержать комментарии.

2.1.7. Пустые строки¶

Логическая строка, содержащая только пробелы, табуляции, формы перевода и, возможно, комментарий, игнорируется (т.н. токен NEWLINE не создается). Во время интерактивного ввода операторов обработка пустой строки может отличаться в зависимости от реализации цикла чтения-вычисления-печати. В стандартном интерактивном интерпретаторе полностью пустая логическая строка (т.е. не содержащая даже пробелов или комментариев) завершает многострочный оператор.

2.1.8. Отступ¶

Начальные пробелы (пробелы и табуляции) в начале логической строки используются для вычисления уровня отступа строки, который используется для определения группировки операторов.

Табуляции заменяются (слева направо) от одного до восьми пробелов, так что общее количество символов до замены включительно кратно восьми (предполагается, что это то же правило, что и в Unix). Общее количество пробелов перед первым непустым символом определяет отступ строки. Отступ не может быть разделен на несколько физических строк с помощью обратной косой черты; пробел до первой обратной косой черты определяет отступ.

Отступы отклоняются как несогласованные, если в исходном файле табуляции и пробелы смешаны таким образом, что значение зависит от количества пробелах в табуляции; в этом случае возникает TabError .

Примечание о кроссплатформенной совместимости: из-за природы текстовых редакторов на платформах, отличных от UNIX, неразумно использовать сочетание пробелов и табуляции для отступов в одном исходном файле. Также следует отметить, что разные платформы могут явно ограничивать максимальный уровень отступа.

В начале строки может присутствовать символ перевода страницы; он будет проигнорирован при вычислениях отступов выше. Символы перевода страницы, встречающиеся в другом месте в начальных пробелах, имеют неопределенный эффект (например, они могут сбрасывать счётчик пробелов до нуля).

Уровни отступа последовательных строк используются для генерации токенов INDENT и DEDENT с использованием стека следующим образом.

Перед чтением первой строки файла в стек помещается единственный ноль; это больше никогда не появится. Числа, помещенные в стек, всегда будут строго увеличиваться снизу вверх. В начале каждой логической строки уровень отступа строки сравнивается с вершиной стека. Если он равен, ничего не происходит. Если он больше, он помещается в стек и генерируется один токен INDENT. Если он меньше, это должно быть одно из чисел, встречающихся в стеке; все числа в стеке, которые больше, выскакивают, и для каждого выданного числа генерируется токен DEDENT. В конце файла генерируется токен DEDENT для каждого числа, оставшегося в стеке, которое больше нуля.

Вот пример правильного (хотя и сбивающего с толку) фрагмента кода Python с отступом

В следующем примере показаны различные ошибки отступов:

(Фактически, первые три ошибки обнаруживаются парсером; только последнюю ошибку обнаруживает лексический анализатор — отступ return r не соответствует уровню, извлеченному из стека.)

2.1.9. Пробел между токенами¶

За исключением начала логической строки или строковых литералов, пробелы, табуляция и форм перехода могут использоваться как взаимозаменяемые для разделения токенов. Пробелы необходимы между двумя токенами, только если их конкатенация в противном случае могла бы интерпретироваться как другой токен (например, ab — один токен, а a b — два токена).

2.2. Другие токены¶

Помимо NEWLINE, INDENT и DEDENT существуют следующие категории токенов: идентификаторы, ключевые слова, литералы, операторы и разделители. Символы пробела (отличные от терминаторов строк, обсуждавшихся ранее) не являются токенами, а служат для разграничения токенов. В случае неоднозначности токен представляет собой максимально длинную строку, которая образует допустимый токен при чтении слева направо.

2.3. Идентификаторы и ключевые слова¶

Идентификаторы (также называемые names) описываются следующими лексическими определениями.

Синтаксис идентификаторов в Python основан на приложении UAX-31 стандарта Юникод с уточнениями и изменениями, как определено ниже; см. также PEP 3131 для получения дополнительной информации.

В диапазоне ASCII (U+0001..U+007F) допустимые символы для идентификаторов такие же, как в Python 2.x: прописные и строчные буквы от A до Z , подчеркивание _ и, за исключением первого символа, цифры от 0 до 9 .

Python 3.0 вводит дополнительные символы вне диапазона ASCII (см. PEP 3131). Для этих символов в классификации используется версия базы данных символов Юникод, включенная в модуль unicodedata .

Идентификаторы не ограничены по длине. Регистр имеет значение.

Коды категорий Юникод, упомянутые выше, обозначают :

  • Lu — прописные буквы
  • Ll — строчные буквы
  • Lt — заглавные буквы
  • Lm — символ буквы модификатора
  • Lo — другие буквы
  • Nl — буквы цифр
  • Mn — непробельные символы
  • Mc — символ ненулевой ширины
  • Nd — десятичные числа
  • Pc — знак препинания
  • Other_ID_Start — явный список символов в PropList.txt для поддержки обратной совместимости
  • Other_ID_Continue — также

Все идентификаторы преобразуются в нормальную форму NFKC при анализе; сравнение идентификаторов основано на NFKC.

Ненормативный файл HTML, в котором перечислены все допустимые символы идентификатора для Unicode 4.1, можно найти по адресу https://www.unicode.org/Public/13.0.0/ucd/DerivedCoreProperties.txt

2.3.1. Ключевые слова¶

Следующие идентификаторы используются как зарезервированные слова или ключевые слова языка и не могут использоваться как обычные идентификаторы. Они должны быть написаны точно так, как написано далее :

2.3.2. Зарезервированное классы идентификаторов¶

Определенные классы идентификаторов (помимо ключевых слов) имеют особое значение. Эти классы идентифицируются шаблонами начальных и конечных символов подчеркивания :

Не импортируется from module import * . Специальный идентификатор _ используется в интерактивном интерпретаторе для хранения результата последнего вычисления; он хранится в модуле builtins . В не интерактивном режиме _ не имеет особого значения и не определяется. См. раздел Оператор import .

Имя _ часто используется в связи с интернационализацией; см. документацию к модулю gettext для получения дополнительной информации об этом соглашении.

2.4. Литералы¶

Литералы — это обозначения константных значений некоторых встроенных типов.

2.4.1. Строковые и байтовые литералы¶

Строковые литералы описываются следующими лексическими определениями:

Одно синтаксическое ограничение, не указанное в этих листингах, состоит в том, что не допускается использование пробелов между stringprefix или bytesprefix и остальной частью литерала. Набор символов исходника определяется объявлением кодировки; это UTF-8, если в исходном файле не указано объявление кодировки; см. раздел Декларация кодировки .

На простом английском языке: оба типа литералов могут заключаться в соответствующие одинарные кавычки ( ‘ ) или двойные кавычки ( " ). Они также могут быть заключены в соответствующие группы из трех одинарных или двойных кавычек (обычно они обозначаются как Строки в тройных кавычках). Символ обратной косой черты ( \ ) используется для экранирования символов, которые в противном случае имеют особое значение, таких как новая строка, сама обратная косая черта или символ кавычки.

Байтовые литералы всегда имеют префикс ‘b’ или ‘B’ ; они производят экземпляр типа bytes вместо типа str . Они могут содержать только символы ASCII; байты с числовым значением 128 или больше должны быть выражены с помощью escape-символов.

Как строковые, так и байтовые литералы необязательно могут иметь префикс с буквой ‘r’ или ‘R’ ; такие строки называются необработанные строки и обрабатывают обратную косую черту как литеральные символы. В результате в строковых литералах escape-последовательности ‘\U’ и ‘\u’ в необработанных строках специально не обрабатываются. Поскольку необработанные Юникод литералы в Python 2.x ведут себя иначе, чем в Python 3.x, синтаксис ‘ur’ не поддерживается.

Добавлено в версии 3.3: Префикс ‘rb’ для литералов необработанных байтов был добавлен как синоним ‘br’ .

Добавлено в версии 3.3: Поддержка устаревшего Юникод литерала ( u’value’ ) была повторно введена, чтобы упростить обслуживание двух кодовых баз Python 2.x и 3.x. См. PEP 414 для получения дополнительной информации.

Строковый литерал с префиксом ‘f’ или ‘F’ — это форматированный строковый литерал; см. Форматированные строковые литералы . ‘f’ можно комбинировать с ‘r’ , но не с ‘b’ или ‘u’ , поэтому строки в необработанном формате возможны, но не форматированные байтовые литералы.

В литералах с тройными кавычками разрешены (и сохраняются) неэкранированные символы новой строки и кавычки, за исключением того, что три неэкранированных кавычки подряд завершают литерал. («Кавычка» — это символ, используемый для открытия литерала, т.е. ‘ или " .)

Если не указан префикс ‘r’ или ‘R’ , escape-последовательности в строковых и байтовых литералах интерпретируются в соответствии с правилами, аналогичными тем, которые используются в стандарте C. Распознаваемые escape- последовательности :

Escape последовательность Значение Прим.
\newline Обратный слэш и новая строка игнорируются  
\\ Бэкслэш ( \ )  
\’ Одиночная кавычка ( ‘ )  
\" Двойная кавычка ( " )  
\a ASCII звонок (BEL)  
\b ASCII бекспейс (BS)  
\f ASCII подача бумаги (FF)  
\n ASCII перевод строки (LF)  
\r ASCII возврат каретки (CR)  
\t ASCII горизонтальная табуляция (TAB)  
\v ASCII вертикальная табуляция (VT)  
\ooo Символ с восьмеричным значением ooo (1,3)
\xhh Символ с шестнадцатеричным значением hh (2,3)

В строковых литералах распознаются только escape-последовательности :

Escape последовательность Значение Прим.
\N

Именнованный символ name в базе данных Юникод (4)
\uxxxx Символ с 16-битным hex значением xxxx (5)
\Uxxxxxxxx Символ с 32-битным hex значением xxxxxxxx (6)

Как и в стандарте C, допускается до трех восьмеричных цифр.

В отличие от стандарта C требуется ровно две шестнадцатеричные цифры.

В байтовом литерале шестнадцатеричные и восьмеричные escape-символы обозначают байт с заданным значением. В строковом литерале эти escape-символы обозначают символ Юникода с заданным значением.

Изменено в версии 3.3: Добавлена поддержка псевдонимов имён [1].

Требуется ровно четыре шестнадцатеричные цифры.

Таким образом можно закодировать любой символ Юникода. Требуется ровно восемь шестнадцатеричных цифр.

В отличие от стандарта C, все нераспознанные escape-последовательности остаются в строке без изменений, то есть обратная косая черта остается в результате. (Это поведение полезно при отладке: если escape-последовательность введена с ошибками, результирующий вывод будет легче распознать как сломанный.) Также важно отметить, что escape-последовательности, распознаваемые только в строковых литералах, попадают в категорию нераспознанных escape- последовательностей для байтовых литералов.

Изменено в версии 3.6: Нераспознанные escape-последовательности производят DeprecationWarning . В будущей версии Python они будут SyntaxWarning и в конечном итоге, SyntaxError .

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

2.4.2. Конкатенация строковых литералов¶

Допускается использование нескольких смежных строковых или байтовых литералов (разделенных пробелом), возможно, с использованием различных соглашений о кавычках, и их значение совпадает с их конкатенацией. Таким образом, "hello" ‘world’ эквивалентен "helloworld" . Эту функцию можно использовать для уменьшения количества необходимых обратных косых черт, для удобного разделения длинных строк на длинные строки или даже, например, для добавления комментариев к частям строк

Обратите внимание, что эта функция определена на синтаксическом уровне, но реализовывается во время компиляции. Оператор „+“ должен использоваться для объединения строковых выражений во время выполнения. Также обратите внимание, что при конкатенации букв можно использовать разные стили заковычивания для каждого компонента (даже смешивая необработанные строки и строки с тройными кавычками), а отформатированные строковые литералы могут быть объединены с простыми строковыми литералами.

2.4.3. Форматированные строковые литералы¶

Добавлено в версии 3.6.

Форматированный строковый литерал или f-string — это строковый литерал, которому предшествует ‘f’ или ‘F’ . Такие строки могут содержать поля замены, которые являются выражениями, разделенными фигурными скобками <> . В то время как другие строковые литералы всегда имеют постоянное значение, форматированные строки на самом деле являются выражениями, вычисляемыми во время выполнения.

Escape-последовательности декодируются как обычные строковые литералы (за исключением случаев, когда литерал также помечен как необработанная строка). После декодирования грамматика содержимого строки будет :

Выражения в форматированных строковых литералах обрабатываются как обычные выражения Python, заключенные в круглые скобки, за некоторыми исключениями. Пустое выражение недопустимы и lambda и выражения присваивания := должны быть заключены в явные круглые скобки. Выражения замены могут содержать разрывы строк (например, в строках с тройными кавычками), но не могут содержать комментарии. Каждое выражение оценивается в контексте, в котором отображается форматированный строковый литерал, в порядке слева направо.

Изменено в версии 3.7: До Python 3.7 выражение await и включения (comprehensions), содержащие предложение async for , были недопустимыми в выражениях в форматированных строковых литералах из-за проблемы с реализацией.

Добавлено в версии 3.8: Знак равенства ‘=’ .

Если указано преобразование, результат вычисления выражения преобразуется перед форматированием. Преобразование ‘!s’ вызывает str() для результата, ‘!r’ вызывает repr() , а ‘!a’ вызывает ascii() .

Затем результат форматируется с использованием протокола format() . Спецификатор формата передается методу __format__() выражения или результата преобразования. Если спецификатор формата пропущен, передается пустая строка. Отформатированный результат затем включается в окончательное значение всей строки.

Спецификаторы формата верхнего уровня могут включать вложенные поля замены. Эти вложенные поля могут включать свои собственные поля преобразования и описатель формата , но могут не включать более глубоко вложенные поля замены. мини-язык спецификатора формата — это то же самое, что используется в строковом методе .format().

Отформатированные строковые литералы могут быть объединены, но поля замены не могут быть разделены между литералами.

Некоторые примеры форматированных строковых литералов:

Следствием использования того же синтаксиса, что и у обычных строковых литералов, является то, что символы в полях замены не должны конфликтовать с кавычками, используемыми во внешнем форматированном строковом литерале

Обратные косые черты недопустимы в выражениях формата и вызовут ошибку:

Чтобы включить значение, в котором требуется обратная косая черта, создайте временную переменную.

Отформатированные строковые литералы нельзя использовать в качестве строк документации, даже если они не содержат выражений.

См. также PEP 498 для предложения, в котором добавлены форматированные строковые литералы, и str.format() , в котором используется механизм связанных форматных строк..

2.4.4. Числовые литералы¶

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

Обратите внимание, что числовые литералы не содержат знака; такая фраза, как -1 , на самом деле является выражением, состоящим из унарного оператора — и литерала 1 .

2.4.5. Целочисленные литералы¶

Целочисленные литералы описываются следующими лексическими определениями:

Нет ограничений на длину целочисленных литералов, кроме того, что может храниться в доступной памяти.

Подчеркивания игнорируются при определении числового значения литерала. Их можно использовать для группировки цифр для повышения удобочитаемости. Одно подчеркивание может находиться между цифрами и после базовых спецификаторов, таких как 0x .

Обратите внимание, что ведущие нули в ненулевом десятичном числе не допускаются. Это сделано для устранения неоднозначности с восьмеричными литералами в стиле C, которые Python использовал до версии 3.0.

Некоторые примеры целочисленных литералов:

Изменено в версии 3.6: Подчеркивания теперь разрешены для группировки в литералах.

2.4.6. Литералы с плавающей запятой¶

Литералы с плавающей запятой описываются следующими лексическими определениями:

Обратите внимание, что целая и экспоненциальная части всегда интерпретируются с использованием системы счисления 10. Например, 077e010 является допустимым и обозначает то же число, что и 77e10 . Допустимый диапазон литералов с плавающей запятой зависит от реализации. Как и в целочисленных литералах, для группировки цифр поддерживаются подчеркивания.

Некоторые примеры литералов с плавающей запятой:

Изменено в версии 3.6: Подчеркивания теперь разрешены для группировки в литералах.

2.4.7. Мнимые литералы¶

Мнимые литералы описываются следующими лексическими определениями :

Мнимый литерал возвращает комплексное число с действительной частью 0.0. Комплексные числа представлены в виде пары чисел с плавающей запятой и имеют те же ограничения на их диапазон. Чтобы создать комплексное число с ненулевой действительной частью, добавьте к нему число с плавающей запятой, например, (3+4j) . Некоторые примеры мнимых литералов

2.5. Операторы¶

Следующие токены являются операторами:

2.6. Разделители¶

Следующие токены служат разделителями в грамматике:

Точка также может встречаться в литералах с плавающей запятой и мнимых литералах. Последовательность из трёх точек имеет особое значение как литерал с многоточием. Вторая половина списка, операторы расширенного присваивания, лексически служат как разделители, но также выполняют операцию.

Следующие печатаемые символы ASCII имеют особое значение как часть других лексем или иным образом важны для лексического анализатора :

Следующие печатаемые символы ASCII не используются в Python. Их появление вне строковых литералов и комментариев является безусловной ошибкой :

2. Lexical analysis¶

A Python program is read by a parser. Input to the parser is a stream of tokens, generated by the lexical analyzer. This chapter describes how the lexical analyzer breaks a file into tokens.

Python reads program text as Unicode code points; the encoding of a source file can be given by an encoding declaration and defaults to UTF-8, see PEP 3120 for details. If the source file cannot be decoded, a SyntaxError is raised.

2.1. Line structure¶

A Python program is divided into a number of logical lines.

2.1.1. Logical lines¶

The end of a logical line is represented by the token NEWLINE. Statements cannot cross logical line boundaries except where NEWLINE is allowed by the syntax (e.g., between statements in compound statements). A logical line is constructed from one or more physical lines by following the explicit or implicit line joining rules.

2.1.2. Physical lines¶

A physical line is a sequence of characters terminated by an end-of-line sequence. In source files and strings, any of the standard platform line termination sequences can be used — the Unix form using ASCII LF (linefeed), the Windows form using the ASCII sequence CR LF (return followed by linefeed), or the old Macintosh form using the ASCII CR (return) character. All of these forms can be used equally, regardless of platform. The end of input also serves as an implicit terminator for the final physical line.

When embedding Python, source code strings should be passed to Python APIs using the standard C conventions for newline characters (the \n character, representing ASCII LF, is the line terminator).

2.1.3. Comments¶

A comment starts with a hash character ( # ) that is not part of a string literal, and ends at the end of the physical line. A comment signifies the end of the logical line unless the implicit line joining rules are invoked. Comments are ignored by the syntax.

2.1.4. Encoding declarations¶

If a comment in the first or second line of the Python script matches the regular expression coding[=:]\s*([-\w.]+) , this comment is processed as an encoding declaration; the first group of this expression names the encoding of the source code file. The encoding declaration must appear on a line of its own. If it is the second line, the first line must also be a comment-only line. The recommended forms of an encoding expression are

which is recognized also by GNU Emacs, and

which is recognized by Bram Moolenaar’s VIM.

If no encoding declaration is found, the default encoding is UTF-8. In addition, if the first bytes of the file are the UTF-8 byte-order mark ( b’\xef\xbb\xbf’ ), the declared file encoding is UTF-8 (this is supported, among others, by Microsoft’s notepad).

If an encoding is declared, the encoding name must be recognized by Python (see Standard Encodings ). The encoding is used for all lexical analysis, including string literals, comments and identifiers.

2.1.5. Explicit line joining¶

Two or more physical lines may be joined into logical lines using backslash characters ( \ ), as follows: when a physical line ends in a backslash that is not part of a string literal or comment, it is joined with the following forming a single logical line, deleting the backslash and the following end-of-line character. For example:

A line ending in a backslash cannot carry a comment. A backslash does not continue a comment. A backslash does not continue a token except for string literals (i.e., tokens other than string literals cannot be split across physical lines using a backslash). A backslash is illegal elsewhere on a line outside a string literal.

2.1.6. Implicit line joining¶

Expressions in parentheses, square brackets or curly braces can be split over more than one physical line without using backslashes. For example:

Implicitly continued lines can carry comments. The indentation of the continuation lines is not important. Blank continuation lines are allowed. There is no NEWLINE token between implicit continuation lines. Implicitly continued lines can also occur within triple-quoted strings (see below); in that case they cannot carry comments.

2.1.7. Blank lines¶

A logical line that contains only spaces, tabs, formfeeds and possibly a comment, is ignored (i.e., no NEWLINE token is generated). During interactive input of statements, handling of a blank line may differ depending on the implementation of the read-eval-print loop. In the standard interactive interpreter, an entirely blank logical line (i.e. one containing not even whitespace or a comment) terminates a multi-line statement.

2.1.8. Indentation¶

Leading whitespace (spaces and tabs) at the beginning of a logical line is used to compute the indentation level of the line, which in turn is used to determine the grouping of statements.

Tabs are replaced (from left to right) by one to eight spaces such that the total number of characters up to and including the replacement is a multiple of eight (this is intended to be the same rule as used by Unix). The total number of spaces preceding the first non-blank character then determines the line’s indentation. Indentation cannot be split over multiple physical lines using backslashes; the whitespace up to the first backslash determines the indentation.

Indentation is rejected as inconsistent if a source file mixes tabs and spaces in a way that makes the meaning dependent on the worth of a tab in spaces; a TabError is raised in that case.

Cross-platform compatibility note: because of the nature of text editors on non-UNIX platforms, it is unwise to use a mixture of spaces and tabs for the indentation in a single source file. It should also be noted that different platforms may explicitly limit the maximum indentation level.

A formfeed character may be present at the start of the line; it will be ignored for the indentation calculations above. Formfeed characters occurring elsewhere in the leading whitespace have an undefined effect (for instance, they may reset the space count to zero).

The indentation levels of consecutive lines are used to generate INDENT and DEDENT tokens, using a stack, as follows.

Before the first line of the file is read, a single zero is pushed on the stack; this will never be popped off again. The numbers pushed on the stack will always be strictly increasing from bottom to top. At the beginning of each logical line, the line’s indentation level is compared to the top of the stack. If it is equal, nothing happens. If it is larger, it is pushed on the stack, and one INDENT token is generated. If it is smaller, it must be one of the numbers occurring on the stack; all numbers on the stack that are larger are popped off, and for each number popped off a DEDENT token is generated. At the end of the file, a DEDENT token is generated for each number remaining on the stack that is larger than zero.

Here is an example of a correctly (though confusingly) indented piece of Python code:

The following example shows various indentation errors:

(Actually, the first three errors are detected by the parser; only the last error is found by the lexical analyzer — the indentation of return r does not match a level popped off the stack.)

2.1.9. Whitespace between tokens¶

Except at the beginning of a logical line or in string literals, the whitespace characters space, tab and formfeed can be used interchangeably to separate tokens. Whitespace is needed between two tokens only if their concatenation could otherwise be interpreted as a different token (e.g., ab is one token, but a b is two tokens).

2.2. Other tokens¶

Besides NEWLINE, INDENT and DEDENT, the following categories of tokens exist: identifiers, keywords, literals, operators, and delimiters. Whitespace characters (other than line terminators, discussed earlier) are not tokens, but serve to delimit tokens. Where ambiguity exists, a token comprises the longest possible string that forms a legal token, when read from left to right.

2.3. Identifiers and keywords¶

Identifiers (also referred to as names) are described by the following lexical definitions.

The syntax of identifiers in Python is based on the Unicode standard annex UAX-31, with elaboration and changes as defined below; see also PEP 3131 for further details.

Within the ASCII range (U+0001..U+007F), the valid characters for identifiers are the same as in Python 2.x: the uppercase and lowercase letters A through Z , the underscore _ and, except for the first character, the digits 0 through 9 .

Python 3.0 introduces additional characters from outside the ASCII range (see PEP 3131). For these characters, the classification uses the version of the Unicode Character Database as included in the unicodedata module.

Identifiers are unlimited in length. Case is significant.

The Unicode category codes mentioned above stand for:

Lu — uppercase letters

Ll — lowercase letters

Lt — titlecase letters

Lm — modifier letters

Lo — other letters

Nl — letter numbers

Mn — nonspacing marks

Mc — spacing combining marks

Nd — decimal numbers

Pc — connector punctuations

Other_ID_Start — explicit list of characters in PropList.txt to support backwards compatibility

All identifiers are converted into the normal form NFKC while parsing; comparison of identifiers is based on NFKC.

A non-normative HTML file listing all valid identifier characters for Unicode 14.0.0 can be found at https://www.unicode.org/Public/14.0.0/ucd/DerivedCoreProperties.txt

2.3.1. Keywords¶

The following identifiers are used as reserved words, or keywords of the language, and cannot be used as ordinary identifiers. They must be spelled exactly as written here:

2.3.2. Soft Keywords¶

New in version 3.10.

Some identifiers are only reserved under specific contexts. These are known as soft keywords. The identifiers match , case and _ can syntactically act as keywords in contexts related to the pattern matching statement, but this distinction is done at the parser level, not when tokenizing.

As soft keywords, their use with pattern matching is possible while still preserving compatibility with existing code that uses match , case and _ as identifier names.

2.3.3. Reserved classes of identifiers¶

Certain classes of identifiers (besides keywords) have special meanings. These classes are identified by the patterns of leading and trailing underscore characters:

Not imported by from module import * .

In a case pattern within a match statement, _ is a soft keyword that denotes a wildcard .

Separately, the interactive interpreter makes the result of the last evaluation available in the variable _ . (It is stored in the builtins module, alongside built-in functions like print .)

Elsewhere, _ is a regular identifier. It is often used to name “special” items, but it is not special to Python itself.

The name _ is often used in conjunction with internationalization; refer to the documentation for the gettext module for more information on this convention.

It is also commonly used for unused variables.

System-defined names, informally known as “dunder” names. These names are defined by the interpreter and its implementation (including the standard library). Current system names are discussed in the Special method names section and elsewhere. More will likely be defined in future versions of Python. Any use of __*__ names, in any context, that does not follow explicitly documented use, is subject to breakage without warning.

Class-private names. Names in this category, when used within the context of a class definition, are re-written to use a mangled form to help avoid name clashes between “private” attributes of base and derived classes. See section Identifiers (Names) .

2.4. Literals¶

Literals are notations for constant values of some built-in types.

2.4.1. String and Bytes literals¶

String literals are described by the following lexical definitions:

One syntactic restriction not indicated by these productions is that whitespace is not allowed between the stringprefix or bytesprefix and the rest of the literal. The source character set is defined by the encoding declaration; it is UTF-8 if no encoding declaration is given in the source file; see section Encoding declarations .

In plain English: Both types of literals can be enclosed in matching single quotes ( ‘ ) or double quotes ( " ). They can also be enclosed in matching groups of three single or double quotes (these are generally referred to as triple-quoted strings). The backslash ( \ ) character is used to escape characters that otherwise have a special meaning, such as newline, backslash itself, or the quote character.

Bytes literals are always prefixed with ‘b’ or ‘B’ ; they produce an instance of the bytes type instead of the str type. They may only contain ASCII characters; bytes with a numeric value of 128 or greater must be expressed with escapes.

Both string and bytes literals may optionally be prefixed with a letter ‘r’ or ‘R’ ; such strings are called raw strings and treat backslashes as literal characters. As a result, in string literals, ‘\U’ and ‘\u’ escapes in raw strings are not treated specially. Given that Python 2.x’s raw unicode literals behave differently than Python 3.x’s the ‘ur’ syntax is not supported.

New in version 3.3: The ‘rb’ prefix of raw bytes literals has been added as a synonym of ‘br’ .

New in version 3.3: Support for the unicode legacy literal ( u’value’ ) was reintroduced to simplify the maintenance of dual Python 2.x and 3.x codebases. See PEP 414 for more information.

A string literal with ‘f’ or ‘F’ in its prefix is a formatted string literal; see Formatted string literals . The ‘f’ may be combined with ‘r’ , but not with ‘b’ or ‘u’ , therefore raw formatted strings are possible, but formatted bytes literals are not.

In triple-quoted literals, unescaped newlines and quotes are allowed (and are retained), except that three unescaped quotes in a row terminate the literal. (A “quote” is the character used to open the literal, i.e. either ‘ or " .)

Unless an ‘r’ or ‘R’ prefix is present, escape sequences in string and bytes literals are interpreted according to rules similar to those used by Standard C. The recognized escape sequences are:

Строки¶

Строки в Python — упорядоченные последовательности символов, используемые для хранения и представления текстовой информации, поэтому с помощью строк можно работать со всем, что может быть представлено в текстовой форме.

Литералы строк¶

Работа со строками в Python очень удобна. Существует несколько литералов строк, которые мы сейчас и рассмотрим.

Строки в апострофах и в кавычках¶

Строки в апострофах и в кавычках — одно и то же. Причина наличия двух вариантов в том, чтобы позволить вставлять в литералы строк символы кавычек или апострофов, не используя экранирование.

Служебные символы¶

Экранированные последовательности позволяют вставить символы, которые сложно ввести с клавиатуры.

Экранированная последовательность Назначение
\n Перевод строки
\a Звонок
\b Забой
\f Перевод страницы
\r Возврат каретки
\t Горизонтальная табуляция
\v Вертикальная табуляция
\N

Идентификатор ID базы данных Юникода
\uhhhh 16-битовый символ Юникода в 16-ричном представлении
\Uhhhh… 32-битовый символ Юникода в 32-ричном представлении
\xhh 16-ричное значение символа
\ooo 8-ричное значение символа
\0 Символ Null (не является признаком конца строки)

«Сырые» строки¶

Если перед открывающей кавычкой стоит символ r (в любом регистре), то механизм экранирования отключается.

Но, несмотря на назначение, «сырая» строка не может заканчиваться символом обратного слэша. Пути решения:

Строки в тройных апострофах или кавычках¶

Главное достоинство строк в тройных кавычках в том, что их можно использовать для записи многострочных блоков текста. Внутри такой строки возможно присутствие кавычек и апострофов, главное, чтобы не было трех кавычек подряд.

Функции и методы строк¶

Конкатенация (сложение)¶

Дублирование строки¶

Длина строки (функция len)¶

Доступ по индексу¶

Как видно из примера, в Python возможен и доступ по отрицательному индексу, при этом отсчет идет от конца строки.

Извлечение среза¶

Оператор извлечения среза: [X:Y] . X – начало среза, а Y – окончание;

символ с номером Y в срез не входит. По умолчанию первый индекс равен 0 , а второй — длине строки.

Кроме того, можно задать шаг, с которым нужно извлекать срез.

Другие функции и методы строк¶

При вызове методов необходимо помнить, что строки в Python относятся к категории неизменяемых последовательностей, то есть все функции и методы могут лишь создавать новую строку.

Поэтому все строковые методы возвращают новую строку, которую потом следует присвоить переменной.

Функция или метод Назначение
S = ‘str’; S = «str»; S = »’str»’; S = «»»str»»» Литералы строк
S = «s\np\ta\nbbb» Экранированные последовательности
S = r»C:\temp\new» Неформатированные строки (подавляют экранирование)
S = b»byte» Строка байтов
S1 + S2 Конкатенация (сложение строк)
S1 * 3 Повторение строки
S[i] Обращение по индексу
S[i:j:step] Извлечение среза
len(S) Длина строки
S.find(str, [start],[end]) Поиск подстроки в строке. Возвращает номер первого вхождения или -1
S.rfind(str, [start],[end]) Поиск подстроки в строке. Возвращает номер последнего вхождения или -1
S.index(str, [start],[end]) Поиск подстроки в строке. Возвращает номер первого вхождения или вызывает ValueError
S.rindex(str, [start],[end]) Поиск подстроки в строке. Возвращает номер последнего вхождения или вызывает ValueError
S.replace(шаблон, замена[, maxcount]) Замена шаблона на замену. maxcount ограничивает количество замен
S.split(символ) Разбиение строки по разделителю
S.isdigit() Состоит ли строка из цифр
S.isalpha() Состоит ли строка из букв
S.isalnum() Состоит ли строка из цифр или букв
S.islower() Состоит ли строка из символов в нижнем регистре
S.isupper() Состоит ли строка из символов в верхнем регистре
S.isspace() Состоит ли строка из неотображаемых символов (пробел, символ перевода страницы ( \f ), «новая строка» ( \n ), «перевод каретки» ( \r ), «горизонтальная табуляция» ( \t ) и «вертикальная табуляция» ( \v ))
S.istitle() Начинаются ли слова в строке с заглавной буквы
S.upper() Преобразование строки к верхнему регистру
S.lower() Преобразование строки к нижнему регистру
S.startswith(str) Начинается ли строка S с шаблона str
S.endswith(str) Заканчивается ли строка S шаблоном str
S.join(список) Сборка строки из списка с разделителем S
ord(символ) Символ в его код ASCII
chr(число) Код ASCII в символ
S.capitalize() Переводит первый символ строки в верхний регистр, а все остальные в нижний
S.center(width, [fill]) Возвращает отцентрованную строку, по краям которой стоит символ fill (пробел по умолчанию)
S.count(str, [start],[end]) Возвращает количество непересекающихся вхождений подстроки в диапазоне [начало, конец] ( 0 и длина строки по умолчанию)
S.expandtabs([tabsize]) Возвращает копию строки, в которой все символы табуляции заменяются одним или несколькими пробелами, в зависимости от текущего столбца. Если TabSize не указан, размер табуляции полагается равным 8 пробелам
S.lstrip([chars]) Удаление пробельных символов в начале строки
S.rstrip([chars]) Удаление пробельных символов в конце строки
S.strip([chars]) Удаление пробельных символов в начале и в конце строки
S.partition(шаблон) Возвращает кортеж, содержащий часть перед первым шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий саму строку, а затем две пустых строки
S.rpartition(sep) Возвращает кортеж, содержащий часть перед последним шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий две пустых строки, а затем саму строку
S.swapcase() Переводит символы нижнего регистра в верхний, а верхнего – в нижний
S.title() Первую букву каждого слова переводит в верхний регистр, а все остальные в нижний
S.zfill(width) Делает длину строки не меньшей width , по необходимости заполняя первые символы нулями
S.ljust(width, fillchar=» «) Делает длину строки не меньшей width , по необходимости заполняя последние символы символом fillchar
S.rjust(width, fillchar=» «) Делает длину строки не меньшей width , по необходимости заполняя первые символы символом fillchar
S.format(*args, **kwargs) Форматирование строки

Форматирование строк¶

Иногда (а точнее, довольно часто) возникают ситуации, когда нужно сделать строку, подставив в неё некоторые данные, полученные в процессе выполнения программы (пользовательский ввод, данные из файлов и т. д.). Подстановку данных можно сделать с помощью форматирования строк. Форматирование можно сделать с помощью оператора % , либо с помощью метода format .

Если для подстановки требуется только один аргумент, то значение — сам аргумент:

А если несколько, то значениями будут являться все аргументы со строками подстановки (обычных или именованных):

Однако метод format умеет большее. Вот его синтаксис:

Теперь спецификация формата:

Выравнивание производится при помощи символа-заполнителя. Доступны следующие варианты выравнивания:

Флаг Значение
< Символы-заполнители будут справа (выравнивание объекта по левому краю) (по умолчанию).
> выравнивание объекта по правому краю.
= Заполнитель будет после знака, но перед цифрами. Работает только с числовыми типами.
^ Выравнивание по центру.

Опция «знак» используется только для чисел и может принимать следующие значения:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Школа онлайн с государственным аттестатом