Примечание: в примерах ниже предполагается, что у вас уже есть файл с содержимым и именем, описанным в начале раздела "Определение модуля и его импорт"
Альтернативная форма инструкции import
позволяет импортировать отдельные объекты из модуля непосредственно в область видимости вызывающего объекта (другого модуля или скрипта):
from <module> import <name(s)>
После выполнения инструкции from <module> import <name>
на имена name
объектов модуля module
можно ссылаться в среде вызывающего объекта (скрипт или другой модуль) без префикса module
:
>>> from md import a, fib >>> a # [100, 200, 300] >>> fib(500) # 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 >>> from md import Foo >>> x = Foo() >>> x # <md.Foo object at 0x02E3AD50>
Оператор try
с предложением except ImportError
можно использовать для защиты от неудачных попыток импорта:
>>> try: ... # Существующий модуль, но несуществующий объект ... from md import foo ... except ImportError: ... print('Object not found in module') ... # Object not found in module
Поскольку форма импорта from <module> import <name>
помещает имена объектов непосредственно в область видимости вызывающего объекта, все объекты, которые уже существуют с тем же именем, будут перезаписаны:
>>> a = ['1', '2', '3'] >>> a # ['1', '2', '3'] >>> from md import a >>> a # [100, 200, 300]
Можно даже без разбора импортировать все из модуля за раз:
from <module> import *
Это позволит поместить имена всех объектов из '_'
.
>>> from md import * >>> fib(500) # 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 >>> a # [100, 200, 300] >>> Foo # <class 'md.Foo'>
Это плохая практика и не рекомендуется делать в производственном коде. К тому же это делать опасно, потому что вы вводите имена в локальную область видимости в массовом порядке. Если вы толком не знаете модуль, то не можете быть уверены, что не будет конфликта среди переменных и имен объектов и есть приличный шанс случайно переписать существующее имя.
Однако этот синтаксис очень удобен, когда вы используете интерпретатор для тестирования или изучения незнакомого модуля.