是否可以导入为通配符和非通配符方式,如:
import spam as sp
from spam import *
在非常相同的文件中?
答案 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 someotherfunction
,sp.somefunction()
。
答案 3 :(得分:2)
adb start-server
将加载模块并将其放入变量adb devices
。
import spam as sp
将加载模块及其所有属性(类,函数等)以及使用通配符导入sp
的那些属性。
from spam import *
是一种快捷方式。但这是一个不好的做法(参见PEP),因为你没有将导入的属性封装到命名空间中(这是你用spam
做的)并且可能导致不必要的行为(如果你的主要有2个函数同名)程序和垃圾邮件)
最佳做法,明确说明您将使用的是import *
,或者您将使用它import spam as sp
并使用from spam import func1, func2