不同的导入语法不等价?
Different import syntaxes not equivalent?
我尝试了两种我认为相同的不同导入语法。奇怪的事情似乎接踵而至:
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']
在这里查看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")
我尝试了两种我认为相同的不同导入语法。奇怪的事情似乎接踵而至:
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']
在这里查看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")