python что значит b перед строкой

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

Литералы строк позволяют интерпретатору Python убедиться что перед ним действительно находится строка. Такой подход называется «утиной» типизацией – если что-то плавает как утка, крякает ка утка и откладывает яйца как утка, то скорее всего это действительно утка. То же самое и с литералами строк – если что-то соответствует литералам строк, то это можно считать строкой. Вот и все.

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

Если внутри строки должны содержаться апострофы или кавычки, то сама строка должна обрамляться кавычками или апострофами соответственно:

Тем не менее если вам нужно использовать внутри стрроки кавычки или апострофы, то лучше всего экранировать их специальным символом \ :

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

Каквычки и апострофы служат для создания «коротких» строк, а тройные кавычки и тройные апострофы для «длинных». Лучше всего это можно продемонстрировать с помощью функции print() и специальных непечатаемых символов, например таких как \n – символ переноса строки, \t – символ табуляции (отступа).

При создании «длинных» строк нам не нужно вводить все непечатаемые символы вручную, т.е. мы можем печатать текст так, как привыкли это делать, спокойно используя клавиши Tab и Enter:

Причем, обычный вывод снова печатает строку «как есть», обозначая все символы переноса и табуляции:

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

Ввод длинных строк

Наличие очень длинных строк в коде, очень затрудняет его чтение, поэтому в Python, предусмотренно несколько способов ввода таких строк. Допустим у нас есть какая-то очень длинная строка и по каким-то причинам мы не можем вставлять внутрь символ » \n «, что автоматически означает невозможность использования тройных кавычек или тройных апострофов. Ну не вводить же эту строку вот так:

Следует сразу отметить, что символ переноса строки » \n » для интерпретатора означает конец инструкции, но только в том случае если этот символ не находится внутри: круглых ( () ), квадратных ( [] ) и фигурных ( <> ) скобок, а так же тройных кавычках или тройных апострофах. Это очень удобно, если нам необходимо вводить очень длинные последовательности, например матрица 6×6 может быть введена вот так:

И в коде это будет смотреться гораздо лучше чем вот это:

Но для одинарных кавычек или апострофов этот способне не подойдет. Здесь на помощь приходит символ » \ » (newline), который интерпретируется как «новая строка«, а не перевод на новую строку. Этот символ позволяет писать очень длинные «однострочные» иструкции в нескольких строках кода. И если вернуться к нашей строке:

То с помощью символа » \ » и оператора конкатенации мы можем записать ее вот так:

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

Надо сразу отметить, что этот трюк работает только для строковых литералов:

А если вспомнить, что символ » \n » игнорируется внутри круглых скобок, то наша длинная строка может быть записана и так:

Именно этот способ рекомендуется использовать в коде. Причем данный способ (в отличие от предыдущего) допускает комментирование:

Префиксы

Так же к литералам строк можно отнести префиксы (в скобках указаны альтернативные способы их написания):

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

Префикс u

Префикс u обозначает строки Юникода и существует лишь для совместимости строк в коде Python3 и Python2. Так что если вы имеете дело только с Python3, то можете смело забыть об этом префиксе.

Префикс r

Префикс r обозначает неформатируемые (или необрабатываемые) строки, в которых подавляется действие символов экранирования. Такие строки очень удобны, для хранения путей к файлам в Windows, например:

Такие строки можно спокойно использовать для работы с файловой системой. Единственное, что следует помнить так это то что неформатированная строка не может заканчиваться символом обратного слеша, т.е. строка r’D:\\мои документы\книги\’ является недопустимой (как и любая друга строка, заканчивающаяся нечетным количеством обратных слешей). В этой ситуации можно поступить тремя способами.

Можно добавить экранированный символ обратного слеша \\ вручную:

Или вообще вместо экранированных строк использовать обычные, в которых каждый символ обратного слеша экранирован:

Так же неформатированные строки очень часто используются для хранения разметки LATEX, которая может быть использована для создания математических формул. Например, строка \sum_^k^<2>=<\frac<6>> интерпретируется как формула:

А в Python использовать такую строку можно так:

Префикс b

Префикс f

Работа данного префикса основана том же микроязыке спецификаторов форматирования, который использует метод format() (см смотрите str.format() — метод форматирования строк). На первый взгляд, этот язык выглядит довольно замысловатой штукой, но если разобраться, то все станет довольно просто.

Действительно замысловато, но в определенных ситуациях весьма и весьма удобно:

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

Префикс fr

Префикс fr определяет литералы форматируемых (!) неформатируемых строк. Иногда, строки с префиксом r действительно называют неформатируемыми, подразумевая, что экранированные последовательности не обрабатываются, а раз они содержат необработанные экранированные последовательности, то их и называют «сырыми». Таким образом, префикс fr это форматируемая «сырая строка».

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

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

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

Конечно мы могли бы воспользоваться оператором конкатенации и собрать необходимую строку по частям, но и этот способ может оказаться вполне жизнеспособным.

Префикс br

Префикс br определяет «сырые» строки байтов, в которых каждый байт всегда выводится в шестнадцатеричном формате, а символы обратного слеша дополнительно экранируются. Обычные строки байтов могут содержать ASCII символы, но иногда это нежелательно:

И вот здесь я должен честно признаться, что вообще не понимаю для чего это может пригодиться. Но раз этот префикс добавили, значит, это кому-нибудь нужно.

Но все же, допустим у нас есть строка байтов b’\x61′ :

Добавим префикс br :

Посмотрим на длины строк:

То поймем, что обращение к символам по индексу возвращает числовые коды Юникода. А это лишний раз подтверждает, что я вообще не понимаю для чего нужен этот префикс.

Источник

What does the ‘b’ character do in front of a string literal?

Apparently, the following is the valid syntax:

I would like to know:

I found a related question right here on SO, but that question is about PHP though, and it states the b is used to indicate the string is binary, as opposed to Unicode, which was needed for code to be compatible from version of PHP u character in the same syntax to specify a string as Unicode. Unfortunately, it doesn’t mention the b character anywhere in that document.

Also, just out of curiosity, are there more symbols than the b and u that do other things?

python что значит b перед строкой. Смотреть фото python что значит b перед строкой. Смотреть картинку python что значит b перед строкой. Картинка про python что значит b перед строкой. Фото python что значит b перед строкой

python что значит b перед строкой. Смотреть фото python что значит b перед строкой. Смотреть картинку python что значит b перед строкой. Картинка про python что значит b перед строкой. Фото python что значит b перед строкой

9 Answers 9

Python 3.x makes a clear distinction between the types:

If you’re familiar with:

If you’re familiar with C(++), then forget everything you’ve learned about char and strings, because a character is not a byte. That idea is long obsolete.

You use str when you want to represent text.

You use bytes when you want to represent low-level binary data like structs.

You can encode a str to a bytes object.

But you can’t freely mix the two types.

The b’. ‘ notation is somewhat confusing in that it allows the bytes 0x01-0x7F to be specified with ASCII characters instead of hex numbers.

But I must emphasize, a character is not a byte.

In Python 2.x

Pre-3.0 versions of Python lacked this kind of distinction between text and binary data. Instead, there was:

In order to ease the 2.x-to-3.x transition, the b’. ‘ literal syntax was backported to Python 2.6, in order to allow distinguishing binary strings (which should be bytes in 3.x) from text strings (which should be str in 3.x). The b prefix does nothing in 2.x, but tells the 2to3 script not to convert it to a Unicode string in 3.x.

So yes, b’. ‘ literals in Python have the same purpose that they do in PHP.

Also, just out of curiosity, are there more symbols than the b and u that do other things?

Источник

Что означает префикс b перед строкой python?

в исходном коде python я наткнулся на небольшой b перед строкой, как в:

Я знаю, о u префикс, обозначающий строку Юникода, и r префикс для необработанного строкового литерала.

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

2 ответов

Это Python3 bytes литерал. Этот префикс отсутствует в Python 2.5 и старше (он эквивалентен простой строке 2.x, в то время как простая строка 3.x эквивалентно литералу с u префикс в 2.икс.) В Python 2.6 + это эквивалентно простой строке,для совместимости с 3.x.

если вы видите, что он используется в исходном коде Python 3, выражение создает bytes объект, а не обычный Unicode str объект. Если вы видите, что это отражается в вашей оболочке Python или как часть списка, dict или другого содержимого контейнера, то вы видите bytes объект представлен с помощью этой нотации.

, потому что bytes объект состоит из последовательности целых чисел, вы можете построить bytes объект от любой другой последовательности целых чисел со значениями в диапазоне 0-255, как список:

bytes модель двоичные данные, включая закодированный текст. Если bytes значение содержит текст, вам нужно сначала его декодировать, используя правильный кодек. Если данные кодируется как UTF-8, например, вы можете получить Unicode str значение:

наоборот, перейти от текста в str объект bytes вам нужно кодирование. Вам нужно выбрать кодировку для использования; по умолчанию используется UTF-8, но то, что вам понадобится, сильно зависит от вашего варианта использования:

вы также можете использовать конструктор, bytes(strvalue, encoding) сделать то же самое.

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

Python 2, версии 2.6 и 2.7 также поддерживают создание строковых литералов с помощью b’..’ синтаксис строкового литерала, чтобы облегчить код, который работает как на Python 2, так и на 3.

Источник

Строки в python 3: методы, функции, форматирование

В уроке по присвоению типа переменной в Python вы могли узнать, как определять строки: объекты, состоящие из последовательности символьных данных. Обработка строк неотъемлемая частью программирования на python. Крайне редко приложение, не использует строковые типы данных.

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

Ниже рассмотрим операторы, методы и функции, доступные для работы с текстом.

Строковые операторы

Оператор сложения строк +

+ — оператор конкатенации строк. Он возвращает строку, состоящую из других строк, как показано здесь:

Оператор умножения строк *

* — оператор создает несколько копий строки. Если s это строка, а n целое число, любое из следующих выражений возвращает строку, состоящую из n объединенных копий s :

Вот примеры умножения строк:

Значение множителя n должно быть целым положительным числом. Оно может быть нулем или отрицательным, но этом случае результатом будет пустая строка:

Оператор принадлежности подстроки in

Встроенные функции строк в python

Python предоставляет множество функций, которые встроены в интерпретатор. Вот несколько, которые работают со строками:

ФункцияОписание
chr()Преобразует целое число в символ
ord()Преобразует символ в целое число
len()Возвращает длину строки
str()Изменяет тип объекта на string

Более подробно о них ниже.

Функция ord(c) возвращает числовое значение для заданного символа.

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

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

Unicode — это современный стандарт, который пытается предоставить числовой код для всех возможных символов, на всех возможных языках, на каждой возможной платформе. Python 3 поддерживает Unicode, в том числе позволяет использовать символы Unicode в строках.

Функция ord() также возвращает числовые значения для символов Юникода:

Функция chr(n) возвращает символьное значение для данного целого числа.

chr() также обрабатывает символы Юникода:

Функция len(s) возвращает длину строки.

len(s) возвращает количество символов в строке s :

Функция str(obj) возвращает строковое представление объекта.

Практически любой объект в Python может быть представлен как строка. str(obj) возвращает строковое представление объекта obj :

Индексация строк

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

Например, схематическое представление индексов строки ‘foobar’ выглядит следующим образом:

python что значит b перед строкой. Смотреть фото python что значит b перед строкой. Смотреть картинку python что значит b перед строкой. Картинка про python что значит b перед строкой. Фото python что значит b перед строкой

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

python что значит b перед строкой. Смотреть фото python что значит b перед строкой. Смотреть картинку python что значит b перед строкой. Картинка про python что значит b перед строкой. Фото python что значит b перед строкой

Вот несколько примеров отрицательного индексирования:

Срезы строк

Если пропустить первый индекс, срез начинается с начала строки. Таким образом, s[:m] = s[0:m] :

Для любой строки s и любого целого n числа ( 0 ≤ n ≤ len(s) ), s[:n] + s[n:] будет s :

Пропуск обоих индексов возвращает исходную строку. Это не копия, это ссылка на исходную строку:

Если первый индекс в срезе больше или равен второму индексу, Python возвращает пустую строку. Это еще один не очевидный способ сгенерировать пустую строку, если вы его искали:

Отрицательные индексы можно использовать и со срезами. Вот пример кода Python:

Шаг для среза строки

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

python что значит b перед строкой. Смотреть фото python что значит b перед строкой. Смотреть картинку python что значит b перед строкой. Картинка про python что значит b перед строкой. Фото python что значит b перед строкой

Иллюстративный код показан здесь:

Как и в случае с простым срезом, первый и второй индексы могут быть пропущены:

Вы также можете указать отрицательное значение шага, в этом случае Python идет с конца строки. Начальный/первый индекс должен быть больше конечного/второго индекса:

В приведенном выше примере, 5:0:-2 означает «начать с последнего символа и делать два шага назад, но не включая первый символ.”

Когда вы идете назад, если первый и второй индексы пропущены, значения по умолчанию применяются так: первый индекс — конец строки, а второй индекс — начало. Вот пример:

Это общая парадигма для разворота (reverse) строки:

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

В Python версии 3.6 был представлен новый способ форматирования строк. Эта функция официально названа литералом отформатированной строки, но обычно упоминается как f-string.

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

Но это громоздко. Чтобы выполнить то же самое с помощью f-строки:

Код с использованием f-string, приведенный ниже выглядит намного чище:

Любой из трех типов кавычек в python можно использовать для f-строки:

Изменение строк

Строки — один из типов данных, которые Python считает неизменяемыми, что означает невозможность их изменять. Как вы ниже увидите, python дает возможность изменять (заменять и перезаписывать) строки.

Такой синтаксис приведет к ошибке TypeError :

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

Есть встроенный метод string.replace(x, y) :

Читайте дальше о встроенных методах строк!

Встроенные методы строк в python

В руководстве по типам переменных в python вы узнали, что Python — это объектно-ориентированный язык. Каждый элемент данных в программе python является объектом.

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

Методы похожи на функции. Метод — специализированный тип вызываемой процедуры, тесно связанный с объектом. Как и функция, метод вызывается для выполнения отдельной задачи, но он вызывается только вместе с определенным объектом и знает о нем во время выполнения.

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

Вы узнаете намного больше об определении и вызове методов позже в статьях про объектно-ориентированное программирование. Сейчас цель усвоить часто используемые встроенные методы, которые есть в python для работы со строками.

В приведенных методах аргументы, указанные в квадратных скобках ( [] ), являются необязательными.

Изменение регистра строки

Методы этой группы выполняют преобразование регистра строки.

string.capitalize() приводит первую букву в верхний регистр, остальные в нижний.

s.capitalize() возвращает копию s с первым символом, преобразованным в верхний регистр, и остальными символами, преобразованными в нижний регистр:

Не алфавитные символы не изменяются:

string.lower() преобразует все буквенные символы в строчные.

s.lower() возвращает копию s со всеми буквенными символами, преобразованными в нижний регистр:

string.swapcase() меняет регистр буквенных символов на противоположный.

s.swapcase() возвращает копию s с заглавными буквенными символами, преобразованными в строчные и наоборот:

string.title() преобразует первые буквы всех слов в заглавные

s.title() возвращает копию, s в которой первая буква каждого слова преобразуется в верхний регистр, а остальные буквы — в нижний регистр:

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

string.upper() преобразует все буквенные символы в заглавные.

s.upper() возвращает копию s со всеми буквенными символами в верхнем регистре:

Найти и заменить подстроку в строке

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

string.count([, [, ]]) подсчитывает количество вхождений подстроки в строку.

s.count() возвращает количество точных вхождений подстроки в s :

Количество вхождений изменится, если указать и :

string.endswith( [, [, ]]) определяет, заканчивается ли строка заданной подстрокой.

s.endswith( ) возвращает, True если s заканчивается указанным и False если нет:

string.find([, [, ]]) ищет в строке заданную подстроку.

s.find() возвращает первый индекс в s который соответствует началу строки :

string.index([, [, ]]) ищет в строке заданную подстроку.

string.rfind([, [, ]]) ищет в строке заданную подстроку, начиная с конца.

string.rindex([, [, ]]) ищет в строке заданную подстроку, начиная с конца.

Классификация строк

Методы в этой группе классифицируют строку на основе символов, которые она содержит.

string.isalnum() определяет, состоит ли строка из букв и цифр.

string.isalpha() определяет, состоит ли строка только из букв.

string.isdigit() определяет, состоит ли строка из цифр (проверка на число).

s.digit() возвращает True когда строка s не пустая и все ее символы являются цифрами, а в False если нет:

string.isidentifier() определяет, является ли строка допустимым идентификатором Python.

string.islower() определяет, являются ли буквенные символы строки строчными.

string.isprintable() определяет, состоит ли строка только из печатаемых символов.

s.isprintable() возвращает, True если строка s пустая или все буквенные символы которые она содержит можно вывести на экран. Возвращает, False если s содержит хотя бы один специальный символ. Не алфавитные символы игнорируются:

string.isspace() определяет, состоит ли строка только из пробельных символов.

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

‘\f’ и ‘\r’ являются escape-последовательностями для символов ASCII; ‘\u2005’ это escape-последовательность для Unicode.

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

string.isupper() определяет, являются ли буквенные символы строки заглавными.

Выравнивание строк, отступы

Методы в этой группе влияют на вывод строки.

string.center( [, ]) выравнивает строку по центру.

string.expandtabs(tabsize=8) заменяет табуляции на пробелы

s.expandtabs() заменяет каждый символ табуляции ( ‘\t’ ) пробелами. По умолчанию табуляция заменяются на 8 пробелов:

tabsize необязательный параметр, задающий количество пробелов:

string.ljust( [, ]) выравнивание по левому краю строки в поле.

string.lstrip([ ]) обрезает пробельные символы слева

s.lstrip() возвращает копию s в которой все пробельные символы с левого края удалены:

string.replace(

    , [, ]) заменяет вхождения подстроки в строке.

s.replace(

    , ) возвращает копию s где все вхождения подстроки

      , заменены на :

    string.rjust( [, ]) выравнивание по правому краю строки в поле.

    string.rstrip([ ]) обрезает пробельные символы справа

    s.rstrip() возвращает копию s без пробельных символов, удаленных с правого края:

    string.strip([ ]) удаляет символы с левого и правого края строки.

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

    string.zfill( ) дополняет строку нулями слева.

    s.zfill( ) возвращает копию s дополненную ‘0’ слева для достижения длины строки указанной в :

    Если s содержит знак перед цифрами, он остается слева строки:

    .zfill() наиболее полезен для строковых представлений чисел, но python с удовольствием заполнит строку нулями, даже если в ней нет чисел:

    Методы преобразование строки в список

    Методы в этой группе преобразовывают строку в другой тип данных и наоборот. Эти методы возвращают или принимают итерируемые объекты — термин Python для последовательного набора объектов.

    Многие из этих методов возвращают либо список, либо кортеж. Это два похожих типа данных, которые являются прототипами примеров итераций в python. Список заключен в квадратные скобки ( [] ), а кортеж заключен в простые ( () ).

    Теперь давайте посмотрим на последнюю группу строковых методов.

    string.join( ) объединяет список в строку.

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

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

    Это можно исправить так:

    string.partition( ) делит строку на основе разделителя.

    s.rpartition( ) делит строку на основе разделителя, начиная с конца.

    string.rsplit(sep=None, maxsplit=-1) делит строку на список из подстрок.

    Без аргументов s.rsplit() делит s на подстроки, разделенные любой последовательностью пробелов, и возвращает список:

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

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

    string.split(sep=None, maxsplit=-1) делит строку на список из подстрок.

    string.splitlines([ ]) делит текст на список строк.

    s.splitlines() делит s на строки и возвращает их в списке. Любой из следующих символов или последовательностей символов считается границей строки:

    РазделительЗначение
    \nНовая строка
    \rВозврат каретки
    \r\nВозврат каретки + перевод строки
    \v или же \x0bТаблицы строк
    \f или же \x0cПодача формы
    \x1cРазделитель файлов
    \x1dРазделитель групп
    \x1eРазделитель записей
    \x85Следующая строка
    \u2028Новая строка (Unicode)
    \u2029Новый абзац (Unicode)

    Вот пример использования нескольких различных разделителей строк:

    Если в строке присутствуют последовательные символы границы строки, они появятся в списке результатов, как пустые строки:

    Заключение

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

    Python есть другие встроенные типы данных. В этих урока вы изучите два наиболее часто используемых:

    Источник

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

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