是否有必要在程序中以两种不同的方式导入相同的模块?

时间:2017-11-24 21:01:48

标签: python import module package python-import

是否可以导入为通配符和非通配符方式,如:

import spam as sp
from spam import *
非常相同的文件中?

4 个答案:

答案 0 :(得分:4)

当您将垃圾邮件作为sp导入时,请确保与其他导入命令没有冲突:

import spam as sp
import myfunctions as my

sp.foo()
my.foo()

这是按预期工作的,但这不是:

from spam import *
from myfunctions import *


foo()
foo() #Which foo() is meant? UNCLEAR!!!

使用import spam as sp避免此问题后,为什么还要使用from spam import *?我不认为这有任何意义。

答案 1 :(得分:3)

我能想到的唯一原因是您希望从<{1}}更改sp.someotherfunction()。如果您只是替换这些行,它会立即破坏代码,您必须使用from spam import *作为前缀。如果您想以较慢的速度进行此更改,则可以执行此操作。然后,您可以在需要的地方慢慢添加import spam as sp,最后删除sp.

答案 2 :(得分:2)

没有。由于您已导入名为spam的{​​{1}},然后使用sp from spam import *导入所有内容,因此永远不会使用,因此不需要。

例如,如果我们有一个名为sp的函数。 somefunction()表示我们可以使用import spam as sp

致电somefunction()

由于sp.somefunction()可以直接调用from spam import *,所以为什么要使用somefunction()

sp.somefunction()被认为是非常糟糕的做法。您应该单独导入每个功能而不是这样做。 (from spam import *from spam import somefunction等等)。或者您可以使用from spam import someotherfunctionsp.somefunction()

答案 3 :(得分:2)

adb start-server将加载模块并将其放入变量adb devicesimport spam as sp将加载模块及其所有属性(类,函数等)以及使用通配符导入sp的那些属性。

当您拥有许多需要访问的类,函数时,

from spam import *是一种快捷方式。但这是一个不好的做法(参见PEP),因为你没有将导入的属性封装到命名空间中(这是你用spam做的)并且可能导致不必要的行为(如果你的主要有2个函数同名)程序和垃圾邮件)

最佳做法,明确说明您将使用的是import *,或者您将使用它import spam as sp并使用from spam import func1, func2