Сообщить об ошибке.

Конструкция импорта from modulle import names

Примечание: в примерах ниже предполагается, что у вас уже есть файл с содержимым и именем, описанным в начале раздела "Определение модуля и его импорт"

Альтернативная форма инструкции 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'>

Это плохая практика и не рекомендуется делать в производственном коде. К тому же это делать опасно, потому что вы вводите имена в локальную область видимости в массовом порядке. Если вы толком не знаете модуль, то не можете быть уверены, что не будет конфликта среди переменных и имен объектов и есть приличный шанс случайно переписать существующее имя.

Однако этот синтаксис очень удобен, когда вы используете интерпретатор для тестирования или изучения незнакомого модуля.