Главная » Просмотр файлов » Саммерфилд - Программирование на Python 3

Саммерфилд - Программирование на Python 3 (1077331), страница 96

Файл №1077331 Саммерфилд - Программирование на Python 3 (Саммерфилд - Программирование на Python 3) 96 страницаСаммерфилд - Программирование на Python 3 (1077331) страница 962018-01-10СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 96)

430 Глава 8. Усовершенствованные приемы программирования контекста из стандартной библиотеки обеспечивают дальнейшее распространение исключений. Иногда бывает необходимо одновременно использовать два или более менеджеров контекста. Например: тгу; и1ть орел(воогсе) ав Г1п: и1тп преп(тагаев, "и") ав гоот; Гог 1(пе 1п Гтп: гоот.игтте(ргосевв(1(пе)) ехсерт ЕпутгопаептЕггог ав агг: рыпт(егг) Здесь выполняется чтение строк из исходного файла и запись обработанных строк в выходной файл.

Использование вложенных инструкций и(тл может быстро привести к непомерному увеличению отступов. К счастью, модуль соптехт1то из стандартной библиотеки предоставляет дополнительную поддержку менеджеров контекста, включая функцию соптехт. певт(), которая позволяет обрабатывать два или более менеджеров контекста одной инструкцией и11Ь. Ниже приводится видоизмененная версия программного кода, который только что был продемонстрирован, в которой мы опустили строки, оставшиеся без изменений: тгу: иып ооптохт11ь.повтео(орел(воигсе), преп(тагоет, "и")) ав ( Г1п, Гоот): Гог 1тпе тп Гтп: Менеджерами контекста являются не только объекты файлов.

Например, некоторые классы, связанные с реализацией многопоточной модели выполнения, используют менеджеры контекста для установки блокировок. Менеджеры контекста могут использоваться также с числами г)ес1за1. Оес1ва1, что очень удобно при реализации вычислений с определенными параметрами (например, с различной точностью). Если возникает необходимость реализовать собственный менеджер контекста, следует создать класс, предоставляющий два метода: ептег () и ех11 (). Всякий раз, когда инструкция и11Ь будет применяться к экземпляру такого класса, интерпретатор автоматически будет вызывать его метод ептег (), а возвращаемое им значение будет присваиваться переменной в части ав уагтав)е (или просто отбрасываться, если переменная не указана). Когда поток выполнения будет покидать область видимости инструкции иттл, интерпретатор будет вызывать метод ех11 () (с информацией об исключении, если ' оно возникло, в виде аргумента).

431 Улучшенные приемы объектно-ориентированного программирования Предположим, что нам требуется выполнить некоторые операции над списком в атомарном режиме, то есть либо все операции должны быть выполнены, либо ни одна из них, чтобы получившийся список всегда находился в предсказуемом состоянии. Например, допустим, что у нас имеется список целых чисел и нам требуется добавить одно число, удалить одно число и изменить пару чисел, причем все зто должно быть выполнено как единая операция. Реализовать это можно следующим способом: тгу; н!ть Атоятс(1вт(1теяв) ав атоятс; а!оп!с.аррепя(58289) ое! атое1с[3] а!се!с[8] = 81738 атоя!с[!поех] = 38172 ехсерт (Аттыьотееггог, 1псехеггог, на1оееггог) ав егг: рг1пт("по спапдев арр1теп ".

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

ог!91па1 = а11вт яе1(.яЬа11он сору = впа11он сору Оет ептег (ве1(). ве1(.аос1(!ес = (ве!т.огтдтпа1[:] тт ве!т.впа11он сору е1ве сору,сеерсору(ве1(.ог19!па1)) гетогп ве!(.аоо!(тес оег ехтт (ве1(, ехс туре, ехс ча1, ехс то): 1( ехс туре 1в Мопе: ве)т.ог!дтпа1[:] = ве1(.аост(!ес При создании объекта Атос!с(!ят мы сохраняем ссылку на оригинальный список. Обратите внимание на флаг, который определяет, какое копирование будет применяться к списку — поверхностное или глубокое. (Поверхностное копирование прекрасно подходит для списков чисел или строк, но если список содержит другие списки или другие коллекции, поверхностного копирования будет недостаточно.) Затем, когда менеджер контекста Атоа1сб!вт используется в инструкции н!1Ь, вызывается его метод ептег ().

В этот момент создается и возвращается копия списка, чтобы все изменения выполнялись в копии. 432 Глава 8. Усовершенствованные приемы программирования Недостижении конца области видимости инструкции иттп вызывается метод ех11 (). Если в процессе работы исключений не возникло, аргумент ехс туре (еехсер$1оп $уреа — тип исключения) будет содержать значение йопе, откуда следует, что можно безопасно заместить элементы оригинального списка элементами модифицированного списка. (Здесь нельзя просто использовать инструкцию ве1(. огт9тпа1 = ве1(. зоа1(тез, потому что она просто заменит одну ссылку на объект другой ссылкой на объект и не окажет никакого воздействия на оригинальный список.) Но если было возбуждено исключение, метод ничего не делает с оригинальным списком, а модифицированный список просто уничтожается.

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

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

В главе 10 мы будем использовать собственный менеджер контекста, чтобы обеспечить закрытие сетевых подключений и сжатых файлов, аз главе 9 — некоторые менеджеры контекста из модуля тпгеао1пр— для проверки отсутствия взаимоисключающих блокировок. Кроме того, при работе над упражнениями к этой главе у нас появится шанс создать более универсальный менеджер контекста для выполнения атомарных операций. Дескрипторы Дескрипторы — это классы, которые обеспечивают доступ к атрибутам других классов.

Любой класс, реализующий один или более специальных методов дескрипторов — 9ет (), зет () и Ое1ете (), называется дескриптором (и может использоваться как дескриптор). Реализации встроенных функций ргорегту() и с1авзветвоо() используют в своей работе дескрипторы. Чтобы разобраться в дескрипторах, важно понять, что хотя они и создаются в классах как атрибуты классов, тем не менее интерпретатор обращается к ним как к экземплярам классов. Чтобы пояснить вышесказанное, представим, что у нас имеется класс, экземпляры которого хранят некоторые строки. Нам необходимо обеспечить доступ к строкам обычным способом, например, как к свойству, а также необходимо обеспечить возможность получения версий строк, в которых были бы экранированы служебные символы ХМ1,.

Улучшенные приемы объектно-ориентированного программирования 433 Одним из простых решений было бы сразу же создавать копии экранированных строк. Но если у нас имеются тысячи строк и нам необходимо прочитать лишь несколько экранированных версий строк, такое решение привело бы к неоправданному перерасходу памяти и вычислительных мощностей. Поэтому мы создадим дескриптор, который будет возвращать экранированные строки по требованию, не сохраняя их в памяти. Сначала рассмотрим клиентский класс (класс-владелец), то есть класс, который использует дескриптор: с1аяз Ргооист: з1отз = (" паве", " сазсгтрттоп", " ргтсе") пава аз хв1 = хв!Зпасон("паве" ) сезсырт1оп ая хв1 = хв15пасон("оезсгтрыоп") сег !птт (зе1(, пава, оеясгтот!оп, рыса): зе1(. паве = паве яа1(.сезсг!от!оп = Оазсг!р(1оп зе1(.рг!са = ргтса Единственное, что мы опустили, — это определение свойств.

Свойство паве доступно только для чтения, а свойства Сезсшр!топ и ргтсе доступны для чтения и для записи. Все эти свойства определяются обычным способом. (Полный программный код вы найдете в файле ХгпЖЬао(ош ру.) Мы использовали переменную 51о!я, чтобы у класса не было атрибута с!с! и его экземпляры могли иметь только зти три атрибута. Такое решение никак связано с использованием дескриптора и не является обязательным.

Атрибуты класса паве аз хв1 и йезсг!р(1- оп аз хв1 определяются как экземпляры дескриптора Хв15лаоон. И хотя объекты класса Ргозис! не имеют атрибутов паве ая хв1 и Сеясг1рт1- оп аз хв1, тем не менее благодаря дескриптору мы имеем возможность написать следующий программный код (фрагмент взят из доктестов модуля): »> ргооист = Ргооист("сп1зе1 <зов>", "сшза1 я сар", А5.25) »> ргосист.паве, ргооис!.пава ая хв1, ргосис!.оаясг!от!оп ая хв1 ('Сшзе1 <Зов>', 'Сызе1 511;Зсвядт; ', 'Сшзе1 Яавр; сар') Такое возможно благодаря тому, что при попытке обратиться к атрибуту„например, паве аз хв1, интерпретатор обнаруживает, что класс Ргоаис! имеет дескриптор с таким именем и использует этот дескриптор для получения значения атрибута.

Ниже приводится полное определение класса Хв15паг)охп с1азз Хв15лааон. оаг 1п1т (за1(, аттгтоите пава); зе1(.аттгтьита пава = аттг!ьи!е паве саг дет (яа1(, !пятапса, оипаг=попе): ге!игл хв1.зах.вахит!1я,азсара( дататтг(!пятапсе, за1(.аттгтьите пава)) 434 Глава 8. Усовершенствованные приемы программирования В момент создания объектов паве аэ хв1 и безсг(р11оп аэ хв1им посредством вызова метода инициализации класса Хв18Пабон передаются имена соответствующих атрибутов класса Р гобьс1, чтобы дескриптор знал, с каким атрибутом ему предстоит работать.

Характеристики

Тип файла
DJVU-файл
Размер
6,88 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6451
Авторов
на СтудИзбе
305
Средний доход
с одного платного файла
Обучение Подробнее