在一个程序中以两种不同的方式导入同一个模块是否有意义?
Is there a point to import the same module in two different ways in a program?
是否有必要以通配符和非通配符方式导入,例如:
import spam as sp
from spam import *
在非常相同的文件中?
当您将垃圾邮件导入为 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 *
?我认为这没有任何意义。
没有。由于您导入了名称为 sp
的 spam
,然后使用 from spam import *
导入了所有内容,因此永远不会使用 sp
,因此没有必要。
例如,如果我们有一个名为 somefunction()
的函数。 import spam as sp
意味着我们可以用 sp.somefunction()
调用 somefunction()
既然from spam import *
可以直接调用somefunction()
为什么要用sp.somefunction()
呢
from spam import *
被认为是非常糟糕的做法。您应该单独导入每个函数,而不是那样做。 (from spam import somefunction
、from spam import someotherfunction
等等)。或者你可以只使用 sp.somefunction()
, sp.someotherfunction()
.
我能想到的唯一原因是您想 将 从 from spam import *
更改为 import spam as sp
。如果你只是替换这些行,它会立即破坏代码,你必须在所有内容前加上 sp.
前缀。如果您想以较慢的速度进行此更改,则可以这样做。然后你可以在需要的地方慢慢添加 sp.
并最终删除 from spam import *
.
import spam as sp
会加载模块并将其放入变量sp
。
from spam import *
将加载模块及其所有属性(类、函数等),并且可以访问使用通配符导入到 spam
中的属性。
import *
是您需要访问大量 类 函数时的快捷方式。但这是一种不好的做法(cf PEP),因为您没有将导入的属性封装到命名空间中(这是您对 import spam as sp
所做的)并且可能导致不需要的行为(如果 2 个函数在您的主函数中具有相同的名称程序并进入垃圾邮件)
最佳实践,明确说明您将使用的是 from spam import func1, func2
或者如果您经常使用它 import spam as sp
并使用 sp.func1()
是否有必要以通配符和非通配符方式导入,例如:
import spam as sp
from spam import *
在非常相同的文件中?
当您将垃圾邮件导入为 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 *
?我认为这没有任何意义。
没有。由于您导入了名称为 sp
的 spam
,然后使用 from spam import *
导入了所有内容,因此永远不会使用 sp
,因此没有必要。
例如,如果我们有一个名为 somefunction()
的函数。 import spam as sp
意味着我们可以用 sp.somefunction()
somefunction()
既然from spam import *
可以直接调用somefunction()
为什么要用sp.somefunction()
呢
from spam import *
被认为是非常糟糕的做法。您应该单独导入每个函数,而不是那样做。 (from spam import somefunction
、from spam import someotherfunction
等等)。或者你可以只使用 sp.somefunction()
, sp.someotherfunction()
.
我能想到的唯一原因是您想 将 从 from spam import *
更改为 import spam as sp
。如果你只是替换这些行,它会立即破坏代码,你必须在所有内容前加上 sp.
前缀。如果您想以较慢的速度进行此更改,则可以这样做。然后你可以在需要的地方慢慢添加 sp.
并最终删除 from spam import *
.
import spam as sp
会加载模块并将其放入变量sp
。
from spam import *
将加载模块及其所有属性(类、函数等),并且可以访问使用通配符导入到 spam
中的属性。
import *
是您需要访问大量 类 函数时的快捷方式。但这是一种不好的做法(cf PEP),因为您没有将导入的属性封装到命名空间中(这是您对 import spam as sp
所做的)并且可能导致不需要的行为(如果 2 个函数在您的主函数中具有相同的名称程序并进入垃圾邮件)
最佳实践,明确说明您将使用的是 from spam import func1, func2
或者如果您经常使用它 import spam as sp
并使用 sp.func1()