Python:通用导入

2 投票
1 回答
9531 浏览
提问于 2025-04-16 17:23

有没有人能解释一下,哪个'import'是通用的,这样我就不需要写比如说:

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

那为什么不直接用 import numpy 或者 from numpy import * 来引入“numpy”里的所有内容呢?

1 个回答

9

我不太明白你说的“全部来自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'。所以,一旦你运行了这个命令,你就可以直接调用dotlinalg.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 *

我想这就是你想要避免的情况。

撰写回答