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

В сети

Пользователей: 101
Из них просматривают:
Аналоги: 36. Видео: 1. Даташиты: 18. Инструкции: 4. Новости: 13. Остальное: 6. Программы: 2. Теги: 1. Торрент: 4. Форум: 13. Чат: 3.
Участников: 5
Гостей: 96

an , alex01981 , 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', за исключением случаев, когда необходимо использовать модули с одинаковыми именами из разных пакетов.

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

Разное

Посыпав место пайки песком или натерев крошащимся камнем, можно паять обычными методами даже алюминий.

Интересно

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

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