假设我想在我的程序中使用scipy,给它别名sp。我也想使用scipy的linalg模块。与numpy不同,该模块不会自动导入。所以我要写:
import scipy as sp
import scipy.linalg
这实现了预期的结果:我现在可以写sp.linalg.inv(...)
。
问题是,行import scipy.linalg
也导入了scipy。鉴于我对scipy的所有调用都是使用别名sp进行的, spyder 在第二行给出了警告'scipy'导入但未使用的。
这样做的正确方法是什么?或者我的方法是正确的,问题只是spyder的?
我能做到:
import scipy.linalg
sp = scipy
但这看起来并不像pythonic ..
答案 0 :(得分:1)
如果您使用
from scipy import linalg
然后scipy
将不会添加到全局命名空间,但这会将linalg
添加到全局命名空间。
作为技术说明, 可以定义sp.linspace
而无需向全局变量添加scipy
或linspace
:
import importlib
import scipy as sp
sp.linalg = importlib.import_module('scipy.linalg')
注意sp
只有globals()
:
print(globals().keys())
# ['__builtins__', '__file__', 'sp', '__package__', '__name__', '__doc__']
或者,或者,
import scipy as sp
sp.linalg = __import__('scipy.linalg', fromlist=['linalg'])