Python: универсальный импорт - PullRequest
2 голосов
/ 11 мая 2011

Кто-нибудь может объяснить, какой «импорт» универсален, поэтому мне не нужно, например, писать:

from numpy import *
import numpy
import numpy as np
from numpy.linalg import *

Почему бы не import numpy или from numpy import *, чтобы вывести все из "numpy"?

1 Ответ

9 голосов
/ 11 мая 2011

Я не уверен, что вы подразумеваете под "все из numpy", но вам никогда не нужно использовать более одной формы import одновременно. Они делают разные вещи:

Вариант первый: import

import numpy приведет весь модуль numpy в текущее пространство имен. Затем вы можете ссылаться на что-либо из этого модуля как numpy.dot или numpy.linalg.eig.

Вариант второй: from ... import *

from numpy import * приведет все открытые объекты из numpy в текущее пространство имен как локальные ссылки. Если пакет содержит список с именем __all__, то эта команда также будет import каждый подмодуль, определенный в этом списке.

Для numpy этот список включает в себя 'linalg', 'fft', 'random', 'ctypeslib', 'ma' и 'doc', которые я последний раз проверял. Итак, запустив эту команду, вы можете позвонить dot или linalg.eig без префикс numpy.

Если вы ищете импорт, который будет тянуть каждый символ из каждого подмодуля в пакете в ваше пространство имен, то я не думаю, что он есть. Вы должны сделать что-то вроде этого:

from numpy.linalg import *
from numpy.fft import *
from numpy.random import *
from numpy.ctypeslib import *
from numpy.ma import *
from numpy import *

Я думаю, это то, чего вы пытаетесь избежать.

...