Итак, давайте пройдемся по небольшой части numpy
, которая, надеюсь, сделает это более понятным.
numpy main __init__.py
code
from . import polynomial
Так чтоговорит сделать относительный импорт (мы знаем из .
) в той же папке, polynomial
.Таким образом, на практике это помещает имя модуля в пространство имен, которое мы знаем следующим образом:
>>> 'polynomial' in dir(numpy)
True
То, что заканчивается в пространстве имен, по большей части основано на именах модулей и пакетах верхнего уровня.Так что в этом случае, с numpy
, каждый из этих импортов вводится, чтобы составить огромный список доступных функций / и т.д.
Посмотрите на все эти операторы импорта:
from . import _distributor_init
from . import core
from .core import *
from . import compat
from . import lib
# FIXME: why have numpy.lib if everything is imported here??
from .lib import *
from . import linalg
from . import fft
from . import polynomial
from . import random
from . import ctypeslib
from . import ma
from . import matrixlib as _mat
from .matrixlib import *
from .compat import long
И если вы хотите, вы можете пройти и собрать все эти имена, а также все в пределах любого *
, и в конечном итоге вы добавите все доступные функции в numpy