Лутц М. - Изучаем Python (1077325), страница 59
Текст из файла (страница 59)
Наконец, какой тип объекта будет получен, когда операция конкатенации применяется к двум спискам или двум строкам? Индексирование строк. Определите строку 8 из четырех символов: 8 = "араа". Затем введите следующее выражение: 8[0)[0)[0)[0)[0). Можете ли вы объяснить, что произошло на этот раз2 (Подсказка: не забывайте, строки — это коллекции символов, а символы в языке Ру1Ьоп представлены односимвольными строками.) Будет ли это выражение работать, если применить его к списку, такому как ['а', 'р', 'а', 'з')? Почему2 Неизменяемые тины. Определите еще раз строку 8 из четырех сим- волов: 8 = "враз".
Напишите операцию присваивания, которая изменила бы строку на "з1ав", используя только операции извлечения среза и конкатенации. Возможно ли выполнить то же самое действие с использованием операций индексирования и конкатенации? С помощью присваивания по индексу элемента7 10. Вложенные структуры. Создайте структуру данных для представления вашей личной информации: имя (имя, фамилия, отчество), возраст, должность, адрес, электронный адрес и номер телефона. При построении структуры вы можете использовать любые комби- нации встроенных объектов (списки, кортежи, словари, строки, числа).
Затем попробуйте обратиться к отдельным элементам структуры по индексам. Являются ли какие-нибудь объекты более предпочтительными для данной структуры? 11. Файлы. Напишите сценарий, который создает и открывает для за- писи новый файл с именем туг((е.гхг, и запишите в него строку ' йе11о Г(1е ног10! ". Затем напишите другой сценарий. который открывает файл тугВе гхг, читает и выводит на экран его содержимое.
Запустите поочередно эти сценарии из командной строки. Появился ли новый файл в каталоге, откуда были запущены сценарии7 Что произойдет, если указать другой каталог в имени файла, которое передается функции ореп7 Примечание: методы записи в файлы не добавляют символ новой строки к записываемым строкам. Добавьте символ ~п явно в конец вашей строки, если хотите получить в файле полностью завершенную строку. 12. Функция г((г.
Попробуйте ввести следующие выражения в интерактивной оболочке. Начиная с версии 1.5, функция Вг г была обобщена Глава 9. Кортежи, файлы и все остальное аетпооз о(с(()) № 7.4 или 7. 5 № 7.5 и более поздние версии (), аетлооз Отт(()) № Словарь так, что она выводит все атрибуты любого объекта, который вас может заинтересовать.
Если вы пользуетесь более ранней версией интерпретатора, тот же эффект можно получить с использованием метода ее(вэба . Если вы пользуетесь интерпретатором РуФЬоп 2.2, скорее всего функция от г окажется единственным работающим инструментом. 111 Инструкции и синтаксис Введение в инструкции языка РУФоп Теперь, когда вы познакомились с базовыми встроенными типами объектов языка Ру$Ьоп, мы начинаем исследование фундаментальных форм инструкций. Как и в предыдущей части книги, мы начнем с общего представления синтаксиса инструкций и затем, в нескольких следующих главах, более подробно рассмотрим конкретные инструкции.
Выражаясь простым языком, инструкции — зто то, что вы пишете, чтобы сообщить интерпретатору, какие действия должна выполнять ваша программа. Если программа гвыполняет какие-то действияэ, то инструкции — это способ указать, какие именно действия должна выполнять программа. РуФЬоп — это процедурный язык программирования, основанный на использовании инструкций; комбинируя инструкции, вы задаете процедуру, которую выполняет интерпретатор в соответствии с целями программы. Структура программы на языке РуФоп Другой способ понять роль инструкций состоит в том, чтобы вновь вернуться к иерархии понятий, представленной в главе 4, в которой рассказывалось о встроенных объектах и выражениях, управляющих ими. Эта глава рассматривает следующую ступень иерархии: 1. Программы делятся на модули.
2. Модули содержат инструкции. 3. Инструкции состоят из выражений. 4. Выражения создают и обрабатывают объекты. Синтаксис языка Ру$Ьоп по сути построен на инструкциях н выражениях. Выражения обрабатывают объекты и встраиваются в инструкции. Инструкции представляют собой более крупные логические блоки Глава 10. Введение в инструкции языка Ру(Ьоп программы — они напрямую используют выражения для обработки объектов, которые мы рассматривали в предыдущих главах. Кроме того, инструкции — это место, где создаются объекты (например, в инструкциях присваивания), а в некоторых инструкциях создаются совершенно новые виды объектов (функции, классы и т. д.).
Инструкции всегда присутствуют в модулях, которые сами управляются инструкциями. Инструкции в языке Рутпоп В табл. 10.1 приводится набор инструкций языка Ру$Ьоп.' В этой части книги рассматриваются инструкции, которые в таблице расположены от начала и до инструкций ЬгеаК и еоп11пое. Ранее неофициально вам уже были представлены некоторые из инструкций, присутствующих в табл. 10.1.
В этой части книги будут описаны подробности, опущенные ранее; вашему вниманию будут представлены остальные процедурные инструкции языка Ру1Ьоп, а также будет рассмотрена общая синтаксическая модель. Инструкции, расположенные в табл. 10.1 ниже, имеют отношение к крупным блокам программы — функциям, классам, модулям и исключениям и заключают в себе крупные понятия программирования, поэтому каждой из них будет посвящен отдельный раздел. Более экзотические инструкции, такие как ехес (которая компилирует и выполняет программный код в строке), раскрываются далее в книге или в стандартной документации по языку Ру1Ьоп.
Таблица 10.1. Инструкции языка Рутйоп Строго говоря, в РРОЬоп 2.5 инструкция уте1О превратилась в выражение, а инструкции 1 гу/ехоерт н 1 гу/Г1па11у были объединены (ранее это были отдельные инструкции, теперь же допускается одновременно использовать н ехсерт н т)па11у в одной инструкции 1 гу). Кроме того, в РуФЬоп 2.6 появнлаеь новая инструкция управления контекстом и!тв/ав — грубо говоря, ова представляет собой альтернативу операциям тгу/гтпв1!у, имеющим отношение к исключениям (в 2.5 инструкция ч)тп/ав является необязательным расширением, которое недоступно, пока явно не будет подключено ннструкцней ггое готоге 1врогт н!тп зтатеиепт). За дополнительной информацией обращайтесь к руководству по языку РуФЬоп.
В будущей версии 3.0 инструкции рг!пт и ехес превратятся в функции н появится новая инструкция поп1оов1, назначение которой будет напоминать назначение существующей ныне инструкции р1оЬа1. 275 История о двух Л Пример Роль Инструкция Обход последовательности гог х 1п ву1тзт: в цикле рг1пь х Гог/е1зе 1[иклы об!него назначения вь!1е Х > у: рг1пт 'ЬеПо' вы)е/е1зе Пустая инструкция-запол- вьт1е Тгсе: нитель раза рззз вьт1е Тгсе: тт пот 1тпе; Ьгеая Переходы з циклах Ьгеая, сопт!псе Обработка исключений тгу/ехсерт/Г!пз11у тгу: асттоп() ехсерт: Сып! 'ест!оп еггог' Возбуждение исключений гз!зе епсзезгсь, 1осат1сп га1зе Доступ к модулям тврогт„ ггов !вссгт зуз ггов зуз тврогт зто!и Создание функций дет Г(а, Ь. с=1. С); ге!сто звЬвсво[0] Сет 9еп(п) Гог ! тп п.
уте10 ! ° 2 Сет, гетсгп, уте1С Создание объектов с1азз зсьс1ззз(8срегс1ззз): зтат!сьата = [] с1ззз Пространства имен 910Ьз1 сет тспст1оп( ) 910Ьз1 х, у х = 'пев' Удаление ссылок Се1 Сзтз[Х] Се1 Сатз[!.)] Се1 ос).зттг Се1 чаг1зь)е де1 Запуск фрагментов про- граммного кода ехес "!враг! " в воовзве ехес созе 1п 901ст, 10!с! ехес Отладочные проверки аззегт х > у зззегт в!тп/аз менеджеры контекста(2.6) в!!с преп('сета' ) аз вуг!1е: ргосезз(вутт1е) История о двух Ы Прежде чем углубиться в детали какой-либо конкретной инструкции из табл.
10.1, я хочу обратить ваше внимание на синтаксис инструкций в языке Рус)тон, показав, как не надо писать программный код, чтобы у вас была возможность сравнить его с другими синтаксическими моделями, которые, возможно, вы видели ранее. 276 Глава 1О. Введение в инструкции языка РутЬол Рассмотрим следующую условную инструкцию на языке С: тт (х > у) ! х= 1; у=2; Это могла бы быть инструкция на языке С, С++, дача, )ачаЯсг1р1 или Рег1. А теперь взгляните на эквивалентную инструкцию на языке Ру(Ьоп: тт х > у; х =! у=2 Первое, что бросается в глаза, — инструкция на языке РубЬоп выглядит компактнее, точнее, в ней меньше синтаксических элементов. Это соответствует основным принципам языка; так как Ру$Ьоп — это язык сценариев, его основная цель состоит в том, чтобы облегчить жизнь программистам за счет меньшего объема ввода с клавиатуры.
Если быть более точным, то, сравнив две синтаксических модели, можно заметить, что язык Ру(Ьоп один новый элемент добавляет, а три элемента„которые присутствуют в языках, подобных языку С, ликвидирует. Что добавляет язык Рутлол Один из новых синтаксических элементов в языке Ру$Ьоп — это символ двоеточия (: ). Все составные инструкции в языке Ру(Ьоп (т. е. инструкции, которые включают вложенные в них инструкции) записываются в соответствии с одним и тем же общим шаблоном, когда основная инструкция завершается двоеточием, вслед за которым располагается вложенный блок кода, обычно с отступом под строкой основной инструкции, как показано ниже: Основная инструкция. Вложенний блок инструкций Двоеточие является обязательным, а его отсутствие является самой распространенной ошибкой, которую допускают начинающие программисты, — я встречал тысячи подтверждений этому в учебных классах.
Фактически, если вы плохо знакомы с языком Ру(Ьоп, то вы почти наверняка очень скоро забудете о символе двоеточия. Большинство текстовых редакторов, обладающих функцией подсветки синтаксиса, делают эту ошибку легко заметной, а с опытом вырабатывается привычка вставлять двоеточие бессознательно (да так, что вы начинаете вводить двоеточие в программный код на языке С++, что приводит к большому числу весьма интересных сообщений об ошибках от компилятора С++!). гп история о двух я Что Рутг)ог) устраняет Хотя Ру(Ьоп требует ввода дополнительного символа двоеточия, существуют три элемента, обязательных для языков, подобных языку С, которые языку РуФЬоп не требуются.
Круглые скобки необязательны Первый элемент — это пара круглых скобок, окружающих условное выражение в основной инструкции: тт (х с у) Круглые скобки здесь являются обязательными во многих С-подобных языках. В языке Ру()топ это не так — мы просто можем опустить скобки, и инструкция будет работать точно так же: 1т х < у Точнее говоря, так как каждое выражение может быть заключено в скобки, присутствие их не будет противоречить синтаксису языка РуФЬоп, и они не будут считаться ошибкой. Но не делайте этого: вы лишь понапрасну будете изнашивать свою клавиатуру, а окружающим сразу будет видно, что вы — бывший программист, использовавший язык С, еще только изучающий язык РуФЬоп (когда-то и я был таким же).