Главная » Просмотр файлов » Лутц М. - Изучаем Python

Лутц М. - Изучаем Python (1077325), страница 110

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

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

Это усложняет программный код, потому что смысл переменной может изменяться с течением времени. Это поведение является частью понятия лексической области видимости — в языке РуьЬоп области видимости, доступные части программного кода, полностью определяются физическим расположением этого программного кода в файле. Области видимости не подвержены влияниям вызовов функций или операции импортирования.' 51 Я Глава 19. Основы программирования модулей В действительности, когда воб1 импортирует воб2, он создает двухуровневое вложение пространств имен.

Используя полный путь к имени воб2. аобЗ, Х, он может погрузиться в модуль аобЗ, который вложен в импортированный модуль аоб2. Суть в том, что модуль воб1 может обращаться к переменным Х во всех трех файлах и, следовательно, имеет доступ ко всем трем глобальным областям видимости: % русяол аоб1.ру 2 3 12Э Однако обратное неверно: модуль вобЗ не имеет доступа к именам в воб2, а модуль воб2 не имеет доступа к именам в воб1. Возможно, этот пример будет проще понять, если отвлечься от пространств имен и областей видимости и сосредоточиться на объектах, задействованных в примере. аоб2 внутри модуля аоб1 — это всего лишь имя, которое ссылается на объект с атрибутами, некоторые из которых могут ссылаться на другие объекты с атрибутами (инструкция 1врогг выполняет операцию присваивания).

Для таких путей, как аоб2. вобЗ. Х, интерпретатор РуФоп выполняет вычисления слева направо, извлекая атрибуты из объектов. Обратите внимание: в ваб1 можно вставить инструкцию 1арог1 аоб2 и затем использовать обращение воб2.аобЗ,Х, но нельзя записать (арогг воб2. аобЗ вЂ” такой синтаксис используется для операции импортирования пакетов (каталогов), которая будет описана в следующей главе. При импортировании пакетов также создаются вложенные пространства имен, но в этом случае инструкция (врогс воспринимает свой аргумент как дерево каталогов„а не как цепочку модулей.

Повторная загрузка модулей Как мы уже видели, программный код модуля по умолчанию запускается всего один раз за все время работы программы. Чтобы принудительно повторно загрузить модуль и запустить программный код в нем, необходимо явно вызвать встроенную функцию ге1оаб. В этом разделе мы исследуем, как использовать возможность повторной загрузки модулей, чтобы сделать систему более динамичной. В двух словах: ° При вызове операции импортирования (с помощью как инструкции 1врогс, так и Ггов) программный код модуля загружается и выполняется, только когда модуль импортируется в первый раз за время работы программы.

° При последующих попытках импортировать модуль будет использоваться объект уже загруженного модуля. Повторная загрузка и запуск программного кода в этом случае не происходят. ° Функция ге1озб принудительно выполняет повторную загрузку уже загруженного модуля и запускает его программный код. Инструкции присваивания, выполняемые при повторном запуске, будут изменять существующий объект модуля. 515 Повторная загрузка модулей Для чего вся эта суета вокруг повторной загрузки модулей"г Функция ге1оаб позволяет изменять части программы, не останавливая всю программу. Благодаря функции ге1оаб эффект от изменений в программном коде можно наблюдать сразу же после внесения этих изменений.

Повторная загрузка модулей поможет не во всех ситуациях, но она позволит существенно сократить цикл разработки. Например, представьте себе программу, предназначенную для работы с базами данных, которая должна при запуске соединиться с сервером — так как изменения или настройки могут проверяться немедленно после повторной загрузки, вам достаточно соединиться с базой данных всего один раз за весь сеанс отладки. Язык Руб)топ относится к языкам интерпретирующего типа (более или менее), поэтому в нем отсутствуют этапы компиляции/компоновки, необходимые, чтобы запустить программу, например, на языке С: модули загружаются динамически уже запущенной программой. Возможность повторной загрузки обеспечивает повышение производительности труда, позволяя вам изменять части работающей программы без ее остановки.

Обратите внимание, что в настоящее время функция ге1оаб может обслуживать только модули, написанные на языке Руа)топ, — скомпилированные модули расширений, написанные на таких языках, как С, тоже могут динамически загружаться во время работы программы, но их нельзя загрузить повторно. Основы использования функции ге!оаэи В отличие от инструкций заро г1 и Т гою: ° ге1оаб — это не инструкция, а встроенная функция. ° Функции ге1оаб передается существующий объект модуля, а не имя. Функция ге1оаб ожидает получить объект, поэтому к моменту ее вызова модуль уже должен быть успешно импортирован (если операция импорта оказалась неудачной из-за синтаксических или каких-либо других ошибок, вам может потребоваться повторить ее, прежде чем можно будет повторно загрузить модуль).

Кроме того, синтаксис инструкции зюрог1 и функции ге1оаб отличается: аргумент должен передаваться функции ге1оаб в круглых скобках, а инструкции 1юра г1 — без них. Повторная загрузка модуля выполняется примерно следующим образом: тюрогт юосы!е В Первоначальное иипортирование .испол~зуются атрибуты модуля... а Теперь выполняются изиенения в файле иодуля ге1оас(юобы!е) а загрузить обновленный модуль ...используются атрибуты модуля... Это типичный случай, когда вы импортируете модуль, затем изменяете исходный программный код в текстовом редакторе, а потом повторно загружаете его. Когда вы вызываете функцию ге1оаб, интерпретатор повторно читает файл с исходными текстами и выполняет инст- 516 Глава )9, Основы программирования модулей рукции, находящиеся на верхнем уровне.

Пожалуй, самое важное, что следует знать о функции ге1оав, — это то, что она изменяет непосредственно сам объект модуля — она не удаляет и не создает его повторно. Вследствие этого все ссылки на объект модуля, имеющиеся в программе, автоматически будут учитывать изменения, произошедшие в результате повторной загрузки. А теперь подробнее о том, как происходит повторная загрузка: ° Функция ге1сэб запускает новый программный код в файле модуля в текущем пространстве имен модуля. При повторном выполнении программный код перезаписывает существующее пространство имен вместо того, чтобы удалять его и создавать вновь.

° Инструкции присваивания на верхнем уровне файла замещают имена новыми значениями. Например, повторный запуск инструкции Сер приводит к замещению предыдущей версии функции в пространстве имен модуля, выполняя повторную операцию присваивания имени функции. ° Повторная загрузка оказывает воздействие на всех клиентов, использовавших инструкцию 1врогт для получения доступа к модулю. Клиенты, использовавшие инструкцию 1зрогг, получают доступ к атрибутам модуля, указывая полные их имена, поэтому после повторной загрузки они будут получать новые значения атрибутов. ° Повторная загрузка будет воздействовать только на тех клиентов, которые будут использовать инструкцию Г гав в будущем. Клиенты, которые использовали инструкцию Г гов для получения доступа к атрибутам в прошлом, не заметят изменений, произошедших в результате повторной загрузки, — они по-прежнему будут ссылаться на старые объекты, полученные до выполнения перезагрузки.

Пример использования ге! оаэи Ниже приводится более конкретный пример использования функции ге1оао. В следующем примере мы изменяем и повторно загружаем файл модуля без остановки интерактивного сеанса работы с интерпретатором РуФЬоп. Повторная загрузка может использоваться в различных других случаях (смотрите врезку «Придется держать в уме: повторная загрузка модулей»), но мы рассмотрим лишь самый простой пример. Во первых, в текстовом редакторе создайте файл модуля с именем сУ«апцегру и добавьте в него следующее содержимое: ееееаре = ГЕ1гег неге1ря" вег рг1ягег(): рг1пс зеееаре Этот модуль создает и экспортирует два имени — одно связано со строкой, а другое является функцией. Теперь запустите интерпретатор Ру$Ьоп, импортируйте модуль и вызовите функцию, которую он экспортирует.

Функция выведет значение глобальной переменной веззасе: Повторная загрузка модулей % рутвоп »> 1прогт слапрвг »> сяапрог.рг1птег() Гтгвт чегэтоп Придется держать в уме: повторная загрузка модулей Помимо возможности перезагружать (и, соответственно, перезапускать) модули в интерактивной оболочке операция повторной загрузки может также использоваться в крупных системах, особенно когда стоимость перезапуска всего приложения слишком высока.

Например, первыми кандидатами на использование возможности динамической перезагрузки модулей являются системы, которые на запуске соединяются с серверами сети. Эта возможность также может использоваться в приложениях с графическим интерфейсом (чтобы изменять действие обработчиков событий в графических элементах управления, не закрывая окна графического интерфейса) и при использовании РуФ)топ в качестве встроенного языка в программах, написанных на С или С++ (вмещающая программа может вызывать повторную загрузку программного кода на языке Ру1)топ без остановки всего приложения).

За более подробным описанием повторной загрузки обработчиков событий в графическом интерфейсе и встроенном программном коде на языке Ру(Ьоп обращайтесь к книге «Ргодгашнйпя Ру()топ». Как правило, повторная загрузка позволяет программам реализовать высокодинамичные интерфейсы. Например, Ру()топ часто используется как язык для настройки больших систем — пользователи могут настраивать программные продукты, изменяя программный код на языке Ру1)топ без необходимости перекомпилировать весь продукт (и даже не имея исходных текстов этого продукта).

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

Не все системы реализуют такой подход, но для тех из них, которые обеспечивают такую возможность, повторная перезагрузка модулей является простым и удобным средством выполнения настроек. 518 Глава 19. Основы программирования модулей Не закрывая интерактивную оболочку интерпретатора, отредактируйте файл модуля в другом окне: .измените Файл сяапрег.ру, не останавливая интервктивний сеанс % ч1 ссапдег.ру Измените глобальную переменную юеаэаде, а также тело функции ргтп!ег: аевваде = "АГ!ег еб111пд" беГ рмп!ег()' ргтпт 'ге1оабеб:', аевэаде Затем вернитесь в окно интерактивной оболочки и перезагрузите модуль, чтобы выполнить обновленный программный код.

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

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

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

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