导入numpy和Scipy软件包的模块/子软件包的差异

发布于 2021-01-29 14:58:13

我正在通过Anaconda 2.1.0发行版使用scipy和numpy。我使用Spyder作为我的Python IDE。

当我运行时 import scipy as sp,我无法通过以下方式访问子包,例如optimize,linalg,cluster等。sp.

但是,运行时import numpy as np,我可以通过访问所有子包,例如linalg,random,matrixlib,多项式,测试等np

两种进口的工作方式不同,是否有原因?为什么不import scipy as sp将所有scipy子包都捕获到sp的命名空间中?

关注者
0
被浏览
157
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    通过设计python语言,可能会发生不同的导入行为。

    默认情况下,模块(*)的import语句仅导入主模块,而不导入子模块。主模块可能(如的情况下numpy),也可能(如scipy)不导入部分或全部子模块。

    其原因如下scipy:在大多数情况下,您只需要scipy包的一个子模块。此默认行为不会在加载代码不需要的子模块时将解释器挂起。

    编辑:请注意,numpy默认情况下不会导入所有子模块,例如,它不会加载numpy.f2py,有关更多详细信息,请参阅问题/答案。

    (*)在这里我的意思是一个导入语句,例如import scipyimport scipy as sp,其中加载了模块。当然,如果您编写该代码,import scipy.optimize则python将首先加载主模块,然后加载子模块。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看