以下导入声明的效果之间是否有任何差别,微妙或不那么微妙?我发现它们都在示例程序中使用,当然,它们似乎都可以工作。如果它们在功能上完全等同,那将违背Python的“只有一种方法来做事”,所以我很困惑。我刚刚开始使用Python并试图保持良好的习惯。例如,对于scipy包中的插值模块......
from scipy import interpolate as spi
或
import scipy.interpolate as spi
两者似乎都将插值模块放在当前命名空间中作为spi
答案 0 :(得分:10)
不,两个语句之间没有区别,两者都将完全相同的对象放在模块名称空间(globals()
)中,名称完全相同。
他们的方式略有不同,但最终结果是一样的。
基本上,第一个做:
from scipy import interpolate
spi = interpolate
del interpolate
,第二个归结为
import scipy.interpolate
spi = scipy.interpolate
del scipy
最后您拥有的spi
名称与interpolate
函数绑定。
就个人而言,我不会重命名这样的功能,我会将其保留为import scipy
并使用scipy.interpolate
,清楚地传达对象来自整个代码的位置,或我使用from scipy import interpolate
。
重命名对象可能会让您更容易为自己键入内容,但是在您几个月缺席后重新访问此代码时,您或其他人可能会更加难以理解。
答案 1 :(得分:0)
这是一个品味问题,真的。
在这种特殊情况下,我会使用import scipy.interpolate as spi
来记住interpolate
是scipy
的子模块。如果我要从模块导入函数,我会使用from module import function
。
唯一的是,与您选择的惯例保持一致。