Саммерфилд - Программирование на Python 3 (1077331), страница 6
Текст из файла (страница 6)
В частности, они не могут совпадать с ключевыми словами языка РуСЪоп и должны начинаться с алфавитного символа или с символа подчеркивания, за которым следует ноль или более алфавитных символов, символов подчеркивания или цифр. Ограничений на длину имен не накладывается, а алфавитные и цифровые символы — это те символы, что определяются Юникодом, включая, но не ограничиваясь цифрами и символами АБСП («а», «Ъ», ..., «а», «А», «В», ..„«Е», «0», «1», ..., «9»).
Идентификаторы в языке РуСЪоп чувствительны к регистру символов, то есть имена 81М1Т, бщсс и 1щсс — это три разных имени. Дополнительные подробности по этому вопросу и ряд необычных примеров приводятся в главе 2. В языке РуСЪоп используется динамический контроль типов, то есть ссылки на объекты в любой момент могут повторно привязываться к различным объектам (которые могут относиться к данным различных типов). В языках со строгим контролем типов (таких как С++ и дача) разрешается выполнять только те операции, которые допустимы для данных, участвующих в операции. В языке РуСЪоп также имеется подобное ограничение, но в данном случае это не называется строгим типизированием, потому что допустимость операции может измениться, например, когда ссылка на объект будет повторно связана с объектом другого типа.
Например: говсв = ббб ргсвс(говсв, суре(говсв)) в в»ведет 8бб <с)агв 'срс'> го»се = твогсв" ргспс(го»се, сура(говсв)) в в»ведет. могсв <с1авв 'всг'> Здесь была создана новая ссылка на объект с именем госсе и связана с новым значением 866 типа 1пс. С этого момента мы можем использовать оператор / применительно к горСе, потому что деление — это допустимая операция для целых чисел. После этого мы вновь воспользовались ссылкой госсе и связали ее с новым объектом типа всг, имеющим значение «ХогСЪ», а объект типа спС был утилиэирован сборщиком мусора, так как не осталось ни одной ссылки, которая ссылалась бы на него. С этого момента применение оператора / будет вызывать ошибку ТуреЕггог, так как деление не является допустимой операцией для строк. Функция Суре( ) возвращает тип данных (который также называется «классом») для указанного элемента.
Эта функция может быть очень полезной на этапе тестирования и отладки, но в готовом программном коде, как Глава 1, Быстрое введение в процедурное программирование правило, не используется, так как существует более удобная альтерна- тива, в чем вы убедитесь в главе 6. При экспериментировании с программным кодом на языке РусЬоп в ин- терактивной оболочке интерпретатора или в командной оболочке РусЬоп — такой„как предоставляется средой 1П1 Е, достаточно просто ввести имя ссылки на объект, чтобы интерпретатор вывел значение связанного с ней объекта. Например: »> х = "О1ое" »> у = 'Огвеп" »> а = х »> х 'Ыов' »>х, у, з ('Ыов', 'йгввп', 'Ыов') Это намного удобнее, чем постоянно вызывать функцию ргтпт(), но эта особенность работает только при использовании интерпретатора РусЬоп в интерактивном режиме — в любых создаваемых программах и модулях для вывода значений следует использовать функцию рг(пт() или подобные ей.
Обратите внимание, что в последнем случае РусЬоп вывел значения в круглых скобках, разделив их запятыми — так обозначается тип данных тцр1е (кортеж), то есть упорядоченная, неизменяемая последовательность объектов. О кортежах мы поговорим в следующем разделе. Составляющая р)оЗ: коллекции данных »> "Оеппагк", пйогнау", "5иеееп" ('Оепиагк', 'ногиау', 'Биеоеп') »> "опе", ('опе',) При выводе кортежа интерпретатор РусЬоп заключает его в круглые скобки. Многие программисты имитируют такое поведение и заключают литералы кортежей в круглые скобки. Если создается кортеж с одним элементом, а Создаиив и вызов фУнкций, стР.
52 Часто бывает удобно хранить целую коллекцию элементов данных. В языке РусЬоп для этого имеется несколько типов коллекций, способных хранить элементы данных, включая ассоциативные массивы и множества. Но в этом разделе мы рассмотрим только два типа коллекций: тор1е (кортежи) и 1т в( (списки). Кортежи и списки в языке РусЬоп могут использоваться для хранения произвольного числа элементов данных любых типов. Кортежи относятся к разряду неиззгеняемьзх объектов, поэтому после создания кортеж нельзя изменить. Списки относятся к разряду изменяемых объектов, поэтому мы легко можем вставлять и удалять элементы списка по своему желанию.
Кортежи создаются с помощью запятых (, ), как показано ниже; «Золотой запас» Ру(Ьоп 33 то даже при наличии круглых скобок мы обязаны использовать запятую, например: (1, ). Пустой кортеж создается с помощью пустых круглых скобок (). Запятая также используется для отделения аргументов при вызове функции, поэтому, если в качестве аргумента требуется передать литерал кортежа, мы должны заключать его в круглые скобки, чтобы избежать неоднозначности.
Ниже приводятся несколько примеров списков: [1, 4, 9, 16, 25, 36. 49] ['а1рьа', 'ьганс', 'сьаг11а', 'се1та', 'аспс'] ['танга', 49, -679, 'аагпнагК', 200] [] Как показано здесь, списки могут создаваться с помощью квадратных скобок ([]), но позднее мы познакомимся с другими способами создания списков. Четвертый список в примере — это пустой список. Списки и кортежи хранят не сами элементы данных, а ссылки на объекты. При создании списков и кортежей (а также при добавлении новых элементов в списки) создаются копии указанных ссылок на объекты. В случае значений-литералов, таких как целые числа и строки, в памяти создаются и инициализируются объекты соответствующих типов, затем создаются ссылки, указывающие на эти объекты, и эти ссылки помещаются в список или в кортеж. Как и все остальное в языке Ру()топ, коллекции данных— это объекты: благодаря этому имеется возможность вкладывать одни объекты-коллекции в другие, например, без лишних формальностей можно создать список списков.
В некоторых ситуациях тот факт, что кортежи и списки, а также большинство коллекций других типов, хранят ссылки на объекты, а не сами объекты, имеет большое значение — об этом будет рассказываться в главе 3 (начиная со стр. 136). В процедурном программировании мы вызываем функции и часто передаем им данные в виде аргументов.
Например, мы уже познакомились с функцией ршпт(). Другая часто используемая функция в языке Ру1)топ — это функция 1еп(), которая в качестве аргумента принимает единственный элемент данных и возвращает его «длину» в виде значения типа тат. Ниже приводятся несколько примеров вызова функции 1еп() — в этом примере мы не стали выделять вывод интерпретатора жирным шрифтом, полагая, что вы уже сами сможете отличить, что вводится с клавиатуры, а что выводится интерпретатором: »> 1ап(("опа",)) 1 »> 1ап((3, 5, 1, 2, "раааа", 5]) 6 »> 1ап("антспат1саыу") 13 Глава 1. Быстрое введение в процедурное программирование а Кортежи, списки и строки имеют вразмерв, то есть это Понятие ряоиор типы данных, которые обладают категорией размера, огр.443 и элементы данных таких типов могут передаваться функции 1еп().
(Если функции 1еп() передать элемент, тип которого не предполагает такого понятия, как размер, будет возбуждено исключение.) Все элементы данных в языке Ру()гоп являются объектами (называемых также экземплярами) определенных типов данных (называемых также классами). Мы будем использовать термины тин данных и класс как взаимозаменяемые. Одно из основных отличий между объектом и простым элементом данных в некоторых других языках программирования (например„встроенные числовые типы в С++ или дача) состоит в том, что объект может обладать методами. В сущности, метод — это обычная функция, которая вызывается в контексте конкретного объекта.
Например, тип 1181 имеет метод аррепв(), с помощью которого можно добавить новый объект в список, как показано ниже: »> х = [Гееога", 49, -879, "аагечагХ", 200] »> х.аррепс(Гааге") »> х ['хеога', 49, -879, 'аагсчагн', 200, 'вого'] Объект х знает, что принадлежит к типу 1181 (все объекты в языке Ру- $)7оп знают, к какому типу они принадлежат), поэтому нам не требуется явно указывать тип данных. Первым аргументом методу вррепс() передается сам объект х — делается это интерпретатором Ру()гоп автоматически, в порядке реализованной в нем поддержки методов. Метод вррепс() изменяет первоначальный список.