Когда я делаю это ...

import numpy as np

... я могу использовать это, но ...

import pprint as pp

... не могу, так как мне нужно это сделать ...

from pprint import pprint as pp

А также __import__(str(module)) и, возможно, больше скрыто в документации .

У меня было несколько прочтений, «импортировать модуль» или «из модуля импорта» например, но ответы больше направлены на то, чтобы сделать выбор. Кроме того, python-how-to-import-other-python-files Просто дает больше понимания плюсов и минусов.

Может ли кто-то пролить свет на то, почему есть разница? что происходит за кулисами при использовании различных типов импорта и как они все работают?

1
Ole Aldric 5 Мар 2018 в 02:00

3 ответа

Лучший ответ

При импорте модуля python должен найти его в файловой системе и назначить имя некоторой переменной в вашем модуле. Различные формы позволяют вам присвоить другое локальное имя («как-то») или обратиться к модулю и назначить одному из его внутренних объектов локальное имя («из ...»).

import numpy                           # imports numpy and names it "numpy"
import numpy as np                     # imports numpy and names it "np"
from pprint import pprint              # imports pprint anonymously, finds an
                                       #   object in pprint called "pprint"
                                       #   and names it "pprint"
from pprint import pprint as pp        # imports pprint anonymously, finds an
                                       #   object in pprint called "pprint"
                                       #   and names it "pp"
3
tdelaney 4 Мар 2018 в 23:28

Разница в том, что модуль pprint содержит функцию pprint. Поэтому, когда вы бежите < Код > импортировать pprint как pp Вам нужно будет вызвать pp.pprint для ссылки на функцию.

Numpy, однако, выставлен на верхнем уровне со всеми его функциями / классами, вложенными в него.

3
tmcnicol 4 Мар 2018 в 23:05

Когда ты сказал

Когда я делаю это ...

import numpy as np

... это вызывается

Вы не правы. numpy не вызывается. Это модуль.

>>> import numpy as np
>>> np()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'module' object is not callable

Функции , предоставляемые модулем, вызываются:

>>> np.arange(5)
array([0, 1, 2, 3, 4])

Аналогично, модуль pprint не вызывается. Это модуль. pprint.pprint функция вызывается:

>>> import pprint as pp
>>> pp.pprint([1, 2, 3])
[1, 2, 3]

Нет необходимости использовать from с pprint или не использовать from с numpy. from импорт просто извлекает определенное содержимое из модуля; например, from pprint import pprint as pp дает вам функцию pprint.pprint как pp. По сути, вам никогда не требуется выполнять импорт так или иначе.

3
user2357112 supports Monica 4 Мар 2018 в 23:19