Foo bar baz что это
Какова история использования «foo» и «bar» в примерах исходного кода?
Почему многие примеры кода, особенно учебные пособия, так часто используют имена «Foo» и «Bar»? Это почти стандарт.
Обновление: Википедия имеет список связанных сокращений, который включает некоторые оригинальные Второй мировой войны, перечисленные Аткинсоном.
Любой программист поймет мотивацию использования foo и bar для именования переменных. Они, безусловно, были частью культуры C / UNIX с самого начала, и, как указывает @Walter Mitty, предшествовали этому.
Обновление (05.10.2009): вот описание Аткинсона:
Обновление (23.11.2011): у @Hugo фантастический список невоенных предшественников.
Я думаю, что это фонетическое произношение фубара.
Имя, используемое в примерах и понимаемое для обозначения того, что обсуждается, или любого случайного члена класса обсуждаемых вещей. Слово foo является каноническим примером. Чтобы избежать путаницы, хакеры никогда (ну, почти никогда) не используют `foo ‘или другие подобные слова в качестве постоянных имен для чего-либо. В именах файлов распространенным соглашением является то, что любое имя файла, начинающееся с имени метасинтаксической переменной, является рабочим файлом, который может быть удален в любое время.
В некоторой степени список предпочтительных метасинтаксических переменных является культурной сигнатурой. Они встречаются как последовательно (используются для связанных групп переменных или объектов), так и в виде синглетонов. Вот несколько распространенных подписей:
Базола, ztesch:
Стэнфорд (с середины 70-х годов).
foo, bar, thud, grunt:
этот сериал был популярен в CMU. Другие переменные, связанные с CMU, включают gorp.
foo, bar, fum:
Сообщается, что эта серия распространена на XEROX PARC.
Фред, Барни:
см. запись для Фред. Это, как правило, британцы.
corge, grault, flarp:
популярный в университете Rutgers и среди хакеров GOSMACS.
zxc, spqr, wombat:
Кембриджский университет (Англия).
Шме
Беркли, GeoWorks, Ingres. Произносится / шме / с коротким / е /.
Университет
Брауна, начало 1970-х годов.
foo, bar, zot
Хельсинкский технологический университет, Финляндия.
blarg, качать
Новая Зеландия.
Тото, Тити, Тата, пачка
Франция.
aap, noot, mies
Нидерланды. Это первые слова, которые ребенок использовал, чтобы научиться писать по буквам на голландской орфографической доске.
Из всего этого, только ‘foo’ и ‘bar’ универсальны (а baz почти так). Составы foobar и `foobaz ‘также имеют очень широкую валюту.
Некоторые жаргонные термины также используются как метасинтаксические имена; например, бормочет и бормочет. См. Также Commonwealth Hackish для обсуждения многочисленных метасинтаксических переменных, найденных в Великобритании и Содружестве.
В статье также приведены общие примеры таких переменных на разных языках программирования:
C
В следующем примере языка программирования C имя функции foo и строка имени переменной являются метасинтаксическими переменными. Строки, начинающиеся с //, являются комментариями.
Спам, ветчина и яйца являются основными метасинтаксическими переменными, используемыми в языке программирования Python. [5] Это ссылка на знаменитый комедийный набросок «Спам» Монти Пайтона, одноименный язык. [6] В следующем примере спам, ветчина и яйца являются метасинтаксическими переменными, а строки, начинающиеся с #, являются комментариями.
В следующем примере baz, foo и bar являются метасинтаксическими переменными, а строки, начинающиеся с #, являются комментариями.
Вот ответ Википедии:
Термины foobar, foo, bar и baz являются общими именами-заполнителями (также называемыми метасинтаксическими переменными), используемыми в компьютерном программировании или документации, связанной с компьютером. Они обычно используются для представления неизвестных значений, как правило, при описании сценария, в котором цель неизвестных значений понятна, но их точные значения являются произвольными и неважными. Термины могут использоваться для обозначения любой части сложной системы или идеи, включая данные, переменные, функции и команды. Сами слова не имеют смысла в этом использовании и являются просто логическими представлениями, так же, как буквы x и y используются в алгебре. Foobar часто используется один; foo, bar и baz обычно используются в том порядке, когда требуется несколько сущностей.
Фу вошел в английский язык как неологизм и считается многими каноническим примером метасинтаксической переменной. [Цитата нужна] Он широко используется в примерах компьютерного программирования (иногда выражается как «только один раз») и псевдокоде. Эрик С. Рэймонд назвал это «важным хакерством» наряду с клуджем и храбростью. [1]
Строки и символьные данные в Python
В уроке по основным типам данных в Python вы узнали, как определить строки: объекты, содержащие последовательности символьных данных. Обработка символьных данных является неотъемлемой частью программирования.
Вот что вы узнаете из этого урока: Python предоставляет богатый набор операторов, функций и методов для работы со строками. Когда вы закончите с этим уроком, вы будете знать, как получить доступ и извлечь части строк, а также будете знакомы с методами, которые доступны для манипулирования и изменения строковых данных.
Содержание
Обработка строк
В следующих разделах описаны операторы, методы и функции, доступные для работы со строками.
Операторы строк
Оператор +
Оператор + объединяет строки. Он возвращает строку, состоящую из операндов, соединенных вместе, как показано здесь:
Оператор *
Вот примеры обеих форм:
Операнд множителя n должен быть целым числом. Вы могли бы подумать, что это должно быть положительное целое число, но забавно, что оно может быть нулевым или отрицательным, и в этом случае результатом будет пустая строка:
Оператор in
Встроенные строковые функции
Как вы видели в уроке по основным типам данных в Python, Python предоставляет множество функций, встроенных в интерпретатор и всегда доступных. Вот некоторые из них, которые работают со строками:
Функция | Описание |
---|---|
chr() | Преобразует целое число в символ |
ord() | Преобразует символ в целое число |
len() | Возвращает длину строки |
str() | Возвращает строковое представление объекта |
Они более подробно рассматриваются ниже.
Возвращает целочисленное значение для данного символа.
На самом базовом уровне компьютеры хранят всю информацию в виде чисел. Для представления символьных данных используется схема перевода, которая сопоставляет каждый символ с его репрезентативным номером.
Символы ASCII એ встречаются довольно часто. Но в мире существует множество различных языков и бесчисленное множество символов и глифов, которые появляются в цифровых медиа. Полный набор символов, которые потенциально могут потребоваться для представления в компьютерном коде, намного превосходит обычные латинские буквы, цифры и символы, которые вы обычно видите.
Unicode એ — это амбициозный стандарт, который пытается предоставить числовой код для каждого возможного символа, на каждом возможном языке, на каждой возможной платформе. Python 3 широко поддерживает Юникод, включая разрешение символов Юникода в строках.
Пока вы остаетесь в области общих символов, существует небольшая практическая разница между ASCII и Unicode. Но функция ord() также возвращает числовые значения для символов Юникода:
Возвращает символьное значение для данного целого числа.
chr() также обрабатывает символы Юникода:
С помощью функции len() вы можете проверить длину строки Python. len(s) возвращает количество символов в s :
str(obj)
Возвращает строковое представление объекта.
Практически любой объект в Python может быть представлен в виде строки. str(obj) возвращает строковое представление объекта obj :
Индексация Строк
Часто в языках программирования отдельные элементы в упорядоченном наборе данных могут быть доступны непосредственно с помощью числового индекса или ключевого значения. Этот процесс называется индексированием.
В Python строки-это упорядоченные последовательности символьных данных, и поэтому их можно индексировать таким образом. Доступ к отдельным символам в строке можно получить, указав имя строки, за которым следует число в квадратных скобках ( [] ).
Отдельные символы могут быть доступны по индексу следующим образом:
Попытка индексировать за пределами конца строки приводит к ошибке:
Вот несколько примеров негативной индексации:
Попытка индексирования с отрицательными числами за пределами начала строки приводит к ошибке:
Нарезка строк
Помните: строковые индексы основаны на нуле. Первый символ в строке имеет индекс 0. Это относится как к стандартному индексированию, так и к нарезке.
Если вы опустите первый индекс, срез начнется в начале строки. Таким образом, s[:m] и s[0:m] эквивалентны:
Опущение обоих индексов возвращает исходную строку целиком. Буквально. Это не копия, а ссылка на исходную строку:
Если первый индекс в срезе больше или равен второму индексу, Python возвращает пустую строку. Это еще один запутанный способ сгенерировать пустую строку, если вы ее искали:
Вот соответствующий код Python:
Указание шага в срезе строки
Существует еще один вариант синтаксиса нарезки, который следует обсудить. Добавление дополнительного : и третий индекс обозначает шаг, который указывает, сколько символов нужно перепрыгнуть после извлечения каждого символа в срезе.
Например, для строки ‘ foobar ‘ фрагмент 0:6:2 начинается с первого символа и заканчивается последним символом (целой строкой), а каждый второй символ пропускается. Это показано на следующей диаграмме:
Аналогично, 1:6:2 задает срез, начинающийся со второго символа (индекс 1) и заканчивающийся последним символом, и снова значение шага 2 вызывает пропуск всех остальных символов:
Иллюстративный REPL код показан здесь:
Как и при любом разрезании, первый и второй индексы могут быть опущены, а по умолчанию используются соответственно первый и последний символы:
Вы также можете указать отрицательное значение шага, и в этом случае Python делает шаг назад через строку. В этом случае начальный/первый индекс должен быть больше конечного/второго индекса:
В приведенном выше примере 5:0:-2 означает “начать с последнего символа и отступить назад на 2, вплоть до первого символа, но не включая его.”
Когда вы отступаете назад, если первый и второй индексы опущены, значения по умолчанию меняются интуитивно: первый индекс по умолчанию находится в конце строки, а второй индекс по умолчанию-в начале. Вот вам пример:
Это обычная парадигма для обращения строки вспять:
Интерполяция переменных в строку
В Python версии 3.6 был введен новый механизм форматирования строк. Эта функция формально называется форматированным строковым литералом, но чаще всего упоминается под псевдонимом f-string.
Одна простая функция вне строк, которую вы можете начать использовать сразу же,-это переменная интерполяция. Вы можете указать имя переменной непосредственно в литерале f-string, и Python заменит это имя соответствующим значением.
Но это слишком громоздко. Чтобы сделать то же самое, используйте f-строку:
Переделанный с помощью f-строки, приведенный выше пример выглядит гораздо чище:
Любой из трех механизмов цитирования Python может быть использован для определения f-строки:
Изменение Строк
Короче говоря, вы не можете. Строки-это один из типов данных, которые Python считает неизменяемыми, то есть не подлежащими изменению. Фактически, все типы данных, которые вы видели до сих пор, неизменны. (Python предоставляет типы данных, которые являются изменяемыми, как вы скоро увидите.)
Подобное утверждение приведет к ошибке:
По правде говоря, нет особой необходимости изменять строки. Обычно вы можете легко выполнить то, что хотите, создав копию исходной строки, которая имеет желаемое изменение на месте. В Python есть очень много способов сделать это. Вот одна из возможностей:
Для этого также существует встроенный строковый метод:
Читайте дальше для получения дополнительной информации о встроенных строковых методах!
Встроенные строковые методы
В уроке по переменным в Python вы узнали, что Python-это высоко объектно-ориентированный язык. Каждый элемент данных в программе Python является объектом.
Вы также знакомы с функциями: вызываемыми процедурами, которые можно вызвать для выполнения определенных задач.
Методы подобны функциям. Метод — это специализированный тип вызываемой процедуры, тесно связанный с объектом. Как и функция, метод вызывается для выполнения отдельной задачи, но он вызывается для конкретного объекта и имеет знание о своем целевом объекте во время выполнения.
Синтаксис вызова метода для объекта выглядит следующим образом:
Вы узнаете гораздо больше об определении и вызове методов позже в обсуждении объектно-ориентированного программирования. На данный момент цель состоит в том, чтобы представить некоторые из наиболее часто используемых встроенных методов, поддерживаемых Python для работы со строковыми объектами.
В следующих определениях методов аргументы, указанные в квадратных скобках ( [] ), являются необязательными.
Преобразования Регистра
Методы этой группы выполняют преобразование регистра в целевой строке.
s.capitalize()
Возвращает целевую строку с заглавной первой буквой.
s.capitalize() возвращает копию s с первым символом, преобразованным в верхний регистр, и всеми остальными символами, преобразованными в нижний регистр:
Неалфавитные символы остаются неизменными:
s.lower()
Преобразует буквенные символы в строчные.
s.lower() возвращает копию s со всеми заглавными символами, преобразованными в нижний регистр:
s.swapcase()
Меняет местами регистр буквенных символов.
s.swapcase() возвращает копию s с заглавными буквенными символами, преобразованными в строчные и наоборот:
s.title()
Преобразует целевую строку в » регистр заголовка.”
Этот метод использует довольно простой алгоритм. Он не пытается провести различие между важными и неважными словами, и он не обрабатывает апострофы, притяжательные или аббревиатуры изящно:
s.upper()
Преобразует буквенные символы в заглавные.
s.upper() возвращает копию s со всеми буквенными символами, преобразованными в верхний регистр:
Найти и заменить
Эти методы предоставляют различные средства поиска целевой строки для указанной подстроки.
s.count([, [, ]])
Подсчитывает вхождения подстроки в целевую строку.
s.count() возвращает количество неперекрывающихся вхождений подстроки в s :
s.endswith( [, [, ]])
Определяет, заканчивается ли целевая строка заданной подстрокой.
s.find([, [, ]])
Выполняет поиск в целевой строке заданной подстроки.
s.index([, [, ]])
Выполняет поиск в целевой строке заданной подстроки.
s.rfind([, [, ]])
Поиск в целевой строке заданной подстроки, начинающейся в конце.
s.rindex([, [, ]])
Поиск в целевой строке заданной подстроки, начинающейся в конце.
s.startswith(
Классификация Символов
Методы этой группы классифицируют строку на основе содержащихся в ней символов.
s.isalnum()
Определяет, состоит ли целевая строка из буквенно-цифровых символов.
s.isalpha()
Определяет, состоит ли целевая строка из буквенных символов.
s.isdigit()
Определяет, состоит ли целевая строка из цифровых символов.
s.isidentifier()
Определяет, является ли целевая строка допустимым идентификатором Python.
s.islower()
Определяет, являются ли буквенные символы целевой строки строчными.
s.isprintable()
Определяет, состоит ли целевая строка полностью из печатаемых символов.
s.isspace()
Определяет, состоит ли целевая строка из пробельных символов.
Наиболее часто встречающимися пробелами являются пробел ‘ ‘, табуляция ‘ \t ‘ и новая строка ‘ \n ‘:
Однако есть несколько других символов ASCII, которые квалифицируются как пробелы, и если вы учитываете символы Unicode, то их довольно много:
s.istitle()
Определяет, является ли целевая строка заголовком.
s.isupper()
Определяет, являются ли буквенные символы целевой строки заглавными.
Форматирование Строк
Методы этой группы изменяют или улучшают формат строки.
s.center( [, ])
s.expandtabs(tabsize=8)
Разворачивает столбцы в строку.
s.expandtabs() заменяет каждый символ табуляции (‘ \t ‘) пробелами. По умолчанию пробелы заполняются при условии остановки табуляции в каждом восьмом столбце:
tabsize является необязательным параметром, определяющим остановку колонны:
s.ljust( [, ])
Левостороннее выравнивание строки в поле.
s.lstrip([ ])
Обрезает ведущие символы из строки.
s.lstrip() возвращает копию s с любыми пробелами, удаленными с левого конца:
s.replace( , [, ])
Заменяет вхождения подстроки в строке.
s.rjust( [, ])
Правостороннее выравнивание строки в поле.
s.rstrip([ ])
Обрезает конечные символы из строки.
s.rstrip() возвращает копию s с любыми пробелами, удаленными с правого конца:
s.strip([ ])
Удаляет символы с левого и правого концов строки.
s.strip() по существу эквивалентен вызову s.lstrip() и s.rstrip() последовательно. Без аргумента он удаляет начальные и конечные пробелы:
Примечание: когда возвращаемое значение строкового метода является другой строкой, как это часто бывает, методы могут быть вызваны последовательно путем цепочки вызовов:
s.zfill( )
Подкладывает строку слева нулями.
Если s содержит начальный знак, он остается на левом краю результирующей строки после вставки нулей:
.zfill() наиболее полезен для строковых представлений чисел, но Python все равно будет обнулять строку, которая не является таковой.:
Преобразование между строками и списками
Методы в этой группе преобразуют между строкой и некоторым составным типом данных либо вставляя объекты вместе, чтобы сделать строку, либо разбивая строку на части.
Многие из этих методов возвращают либо список, либо кортеж. Это составные типы данных, которые являются прототипическими примерами итерируемые объекты в Python. Они описаны в следующем уроке, так что вы скоро узнаете о них! До тех пор просто думайте о них как о последовательностях значений. Список заключен в квадратные скобки ( [] ), а кортеж-в круглые скобки ( () ).
С этим введением давайте взглянем на эту последнюю группу строковых методов.
s.join( )
Конкатенация строк из итерируемого объекта.
В результате получается одна строка, состоящая из объектов списка, разделенных запятыми.
В следующем примере задается как одно строковое значение. Когда строковое значение используется в качестве итеративного, оно интерпретируется как список отдельных символов строки:
Этот пример терпит неудачу, потому что один из объектов в не является строкой:
Это можно исправить с помощью:
s.partition( )
Делит строку на основе разделителя.
s.rpartition( )
Делит строку на основе разделителя.
s.rsplit(sep=None, maxsplit=-1)
Разбивает строку на список подстрок.
Без аргументов s.split() разбивает s на подстроки, разделенные любой последовательностью пробелов, и возвращает подстроки в виде списка:
Когда явно задан в качестве разделителя, предполагается, что последовательные разделители в s разделяют пустые строки, которые будут возвращены:
Однако это не тот случай, когда опущен. В этом случае последовательные пробелы объединяются в один разделитель, и результирующий список никогда не будет содержать пустых строк:
s.split(sep=None, maxsplit=-1)
Разбивает строку на список подстрок.
s.splitlines([ ])
Разрывает строку на границах линий.
s.splitlines() разбивает s на строки и возвращает их в виде спика. Любой из следующих символов или последовательностей символов считается границей линии:
Escape-символ | Описание |
---|---|
\n | Новая строка |
\r | Возврат к началу строки |
\r\n | Возврат к началу строки + заполнение |
\v или \x0b | Подведение Линии |
\f или \x0c | Перевод на следующий лист(Form Feed) |
\x1c | Разделение файлов |
\x1d | разделитель групп |
\x1e | разделитель записей |
\x85 | Следующая Строка (Контрольный Код C1) |
\u2028 | Разделитель Строк Unicode |
\u2029 | Разделитель Абзацев Unicode |
Вот пример использования нескольких различных разделителей строк:
Если в строке присутствуют последовательные символы границ строк, предполагается, что они разделяют пустые строки, которые появятся в списке результатов:
Если необязательный аргумент указан и является истинным, то границы строк сохраняются в результирующих строках:
Объекты bytes
Объект bytes является одним из основных встроенных типов для манипулирования двоичными данными. Объект bytes — это неизменяемая последовательность однобайтовых значений. Каждый элемент в объекте bytes представляет собой небольшое целое число в диапазоне от 0 до 255.
Определение литерала объекта bytes
Байтовый литерал определяется так же, как и строковый литерал с добавлением префикса ‘ b ‘ :
Как и в случае со строками, вы можете использовать любой из механизмов одинарного, двойного или тройного цитирования:
В байтовом литерале допускаются только символы ASCII. Любое символьное значение больше 127 должно быть указано с помощью соответствующей escape-последовательности:
Префикс ‘ r ‘ может использоваться в байтовом литерале для отключения обработки escape-последовательностей, как и в случае со строками:
Определение объекта bytes с помощью встроенной функции bytes()
bytes(, )
Создает объект bytes из строки.
Дополнительные сведения см. В документации Unicode. До тех пор, пока вы имеете дело с обычными латинскими символами, UTF-8 будет хорошо служить вам.
bytes( )
bytes( )
Создает объект bytes из итерируемого объекта.
Операции с байтовыми объектами
Как и строки, объекты bytes поддерживают общие операции последовательности:
Многие методы, определенные для строковых объектов, допустимы и для байтовых объектов:
Хотя определение и представление байтового объекта основано на тексте ASCII, на самом деле он ведет себя как неизменяемая последовательность небольших целых чисел в диапазоне от 0 до 255 включительно. Вот почему один элемент из объекта bytes отображается как целое число:
Однако срез отображается как байтовый объект, даже если он имеет длину всего в один байт:
Вы можете преобразовать объект bytes в список целых чисел с помощью встроенной функции list()
Шестнадцатеричные числа часто используются для указания двоичных данных, поскольку две шестнадцатеричные цифры непосредственно соответствуют одному байту. Класс bytes поддерживает два дополнительных метода, облегчающих преобразование в строку шестнадцатеричных цифр и обратно.
bytes.fromhex()
Возвращает строку, содержащую шестнадцатеричное значение из объекта в байтах.
Объекты bytearray
Объект bytearray также может быть построен непосредственно из объекта bytes :
Вывод
Эти типы являются первыми типами, которые вы рассмотрели, которые являются составными-построенными из набора меньших частей. Python предоставляет несколько составных встроенных типов. В следующем уроке вы познакомитесь с двумя наиболее часто используемыми: списками и кортежами.