不同的导入语法不相同?

时间:2015-03-23 07:22:31

标签: python import sympy

我尝试了两种我认为相同的导入语法。奇怪似乎随之而来:

In [7]: import sympy

In [8]:sympy.physics.units.find_unit("Giga Electron Volt")
Traceback (most recent call last):

  File "<ipython-input-8-8a26ac4a085a>", line 1, in <module>
    sympy.physics.units.find_unit("Giga Electron Volt")

AttributeError: 'module' object has no attribute 'physics'


In [9]:import sympy.physics.units as u

In [10]:u.find_unit("coul")
Out[10]: ['coulomb', 'coulombs']

In [11]:import sympy

In [12]:sympy.physics.units.find_unit("coul")
Out[12]: ['coulomb', 'coulombs']

1 个答案:

答案 0 :(得分:1)

在这里查看sympy的源代码:https://github.com/sympy/sympy/blob/master/sympy/init.py#L55

from .calculus import *
# Adds about .04-.05 seconds of import time
# from combinatorics import *
# This module is slow to import:
#from physics import units
from .plotting import plot, textplot, plot_backends, plot_implicit

他们没有导入物理模块,因为加载需要相当长的时间。这就是您在第一次尝试时收到错误的原因。

手动加载后,解释器已加载并知道它的位置(来自手动导入)。这就是为什么它在第二次尝试时起作用。

所以这种现象不被认为是python导入功能,而是模块初始化。

P.S。 如果取消注释从物理模块加载unit的行,它将是

import sympy
sympy.units.find_unit("coul")