Pythonic从包中导入模块的方法

Nei*_*_UK 6 python scipy python-import

以下导入语句的效果之间是否有任何差别,微妙或不那么微妙?我发现它们都在示例程序中使用,当然,它们似乎都可以工作.如果它们在功能上完全等同,那将违背Python的"只有一种方法来做事",所以我很困惑.我刚刚开始使用Python并试图保持良好的习惯.例如,对于scipy包中的插值模块......

from scipy import interpolate as spi
Run Code Online (Sandbox Code Playgroud)

要么

import scipy.interpolate as spi
Run Code Online (Sandbox Code Playgroud)

两者似乎都将插入模块作为spi放在当前命名空间中

Mar*_*ers 10

不,两个语句之间没有区别,两者都将完全相同的对象放在模块名称空间(globals())中,名称完全相同.

他们以略微不同的方式进行,但最终结果是一样的.

基本上,第一个做:

from scipy import interpolate
spi = interpolate
del interpolate
Run Code Online (Sandbox Code Playgroud)

而第二个归结为

import scipy.interpolate
spi = scipy.interpolate
del scipy
Run Code Online (Sandbox Code Playgroud)

最后你拥有的是spi绑定到该interpolate函数的名称.

就个人而言,我不会重命名这样的功能,我会保留它import scipy并使用scipy.interpolate,清楚地传达对象来自整个代码的位置,或者我会使用from scipy import interpolate.

重命名对象可能会让您更容易为您键入内容,但是当您在数月缺席后重新访问此代码时,可能会让您或其他人更难以理解.


Pie*_* GM 0

这确实是一个品味问题。

在这种特殊情况下,我会使用import scipy.interpolate as spi, 来记住它interpolate是 的子模块scipy。如果我要从模块导入函数,我会使用from module import function.

唯一的事情是,与您选择的约定保持一致。