【问题标题】:Python Import directivePython 导入指令
【发布时间】:2016-01-02 03:01:23
【问题描述】:
  1. 我发现,如果我要导入包并且需要快捷方式,我必须编写

    Import numpy.linalg as lg
    

    但我不知道以这些格式类型编写导入指令的目的是什么,

    import numpy.linalg
    import numpy.numpy.polynomial.polynomial
    

    因为这些指令导入所有 numpy 包的方式就像我只写一样

    import numpy
    

    最后,从假设多项式访问某些函数的语法是相同的

    import numpy
    xx = numpy.polynomial.polynomial.polydiv([2],[6])
    

    两种情况

    import numpy.numpy.polynomial.polynomial
    xx = numpy.polynomial.polynomial.polydiv([2],[6])
    

    那么这样做的目的是什么?

  2. NumPy 模块自身的存储对象在哪里?我可以在 NumPy 包的子文件夹中找到函数、类等的定义,但找不到 NumPy 本身的任何文件,例如 numpy.sin() 函数。

【问题讨论】:

  • 这是import,而不是Import。案件很重要。
  • import numpy as np 对我来说已经足够了。
  • numpy __init__.py 有十几个 from . Import ... 语句。这显示了无需进一步导入即可获得的内容。

标签: python numpy


【解决方案1】:

导入包,例如numpy,不保证导入其子模块和子包。由于numpy 模块本身执行的导入,import numpy 恰好加载了numpy.linalgnumpy.polynomial,但这并不能保证,并且并非所有 NumPy 子模块都会发生这种情况。例如,

>>> import numpy
>>> numpy.distutils
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'distutils'
>>> import numpy.distutils
>>> numpy.distutils
<module 'numpy.distutils' from 'C:\Python27\lib\site-packages\numpy\distutils\__init__.pyc'>

numpy 命名空间中的对象的源代码,因对象而异,可能相当复杂。例如,numpy.sin 是由numpy/core/code_generators/generate_umath.py 生成的 C 代码编译而成的 ufunc,并且该代码生成器使用来自一堆其他文件的组件。

【讨论】:

  • 但是是否有任何正常的numpy 功能需要单独导入?除了import numpy as np,我从来不需要使用任何东西。 scipy 的组织方式不同,需要为每个包单独导入,例如from scipy import sparse.
  • @hpaulj:“正常”NumPy 功能?我认为numpy.__init__ 会自动加载所有这些,但我不认为这是有据可查的保证。
  • 你能引用 init 中最相关的导入代码吗?
猜你喜欢
  • 2016-11-23
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
  • 1970-01-01
  • 2015-04-01
  • 1970-01-01
  • 2014-02-22
  • 1970-01-01
相关资源
最近更新 更多