Разделы инструкций

В сети

Пользователей: 56
Из них просматривают:
Аналоги: 17. Даташиты: 8. Инструкции: 2. Новости: 10. Остальное: 7. Программы: 1. Производители: 2. Форум: 8. Чат: 1.
Участников: 3
Гостей: 53

Google , wolf170571 , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

Новые объявления

Оглавление

6.6.1. Импортирование всего содержимого пакета (модуля)

Что же происходит, когда пользователь использует 'from Sound.Effects import *' ? В идеале, интерпретатор должен каким-либо образом обойти файлы, находящиеся в каталоге пакета, и импортировать их все. К сожалению, такой подход не будет работать достаточно хорошо на таких платформах, как Macintosh и Windows, где файловая система не всегда имеет точную информацию о регистре букв в именах файлов. В этом случае нет надежного пути узнать, с каким именем должен быть импортирован файл с именем 'ECHO.PY': echo, Echo или ECHO.

Единственный выход для автора — снабдить пакет явным указателем его содержимого. Инструкция import использует следующее соглашение: если в инициализационном файле '__init__.py' определён список с именем __all__, он используется в качестве списка имён модулей, которые должны импортироваться при использовании 'from package import *'. Поддержка этого списка в соответствии с текущим составом пакета возлагается на автора. Можно также не определять список __all__, если авторы не считают уместным импортирование *. Например, файл 'Sounds/Effects/__init__.py' может содержать следующий код:

 

__all__ = ["echo", "surround", "reverse"]

 

Это означает, что from 'Sound.Effects import *' импортирует три указанных модуля из пакета Sound.

Если список __all__ не определён, 'from Sound.Effects import *' не будет импортировать все модули пакета Sound.Effects, а только имена, явным образом определ`нные в инициализационном файле '__init__.py' (включая явно импортированные в нём модули). Кроме того, в текущую область видимости попадут модули пакета, явно загруженные предыдущими инструкциями import, например:

 

import Sound.Effects.echo
import Sound.Effects.surround
from Sound.Effects import *

 

В приведённом примере, модули echo и surround импортируются в текущее пространство имён, потому что они уже определены в пакете Sound.Effects на момент выполнения инструкции from ... import.

Заметим, что импортирование всех имён, определённых в модуле или пакете, обычно приводит к засорению пространства имен и, как результат, к возможным конфликтам. (Некоторые модули специально спроектированы таким образом, чтобы экспортировать только имена, следующие определенному шаблону.) Кроме того, при этом глобальные переменные модуля становятся доступными только для чтения — при попытке присвоить такой переменной новое значение Вы создадите новую (локальную) переменную с таким же именем. А все изменения, внесённые в глобальные переменные модуля после его инициализации, не будут видны за его пределами.

Мы рекомендуем стараться использовать запись 'from package import specific_module', за исключением случаев, когда необходимо использовать модули с одинаковыми именами из разных пакетов.

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити

Разное

Паяльник в дежурном нагреве включайте через диод, этим Вы значительно продлите ему жизнь.

Интересно

Цинк для изготовления паяльной кислоты можно найти в старых батарейках питания.

Похожие инструкции