“ from .checks import *”和“ from。import checks”之间的区别

时间:2018-11-14 07:04:53

标签: python

我的项目中有一个名为checks.py的文件。 我想一次导入所有内容。

这两者之间是否有区别?还是只是另一种书写方式?

from .checks import *

from . import checks

2 个答案:

答案 0 :(得分:5)

在第一个中,要访问checks的成员,只需键入成员的名称(因为要导入所有成员)。例如

from .checks import *
foo(5) # foo is member of checks

在第二个中,您仅导入checks,这意味着要访问foo,您必须写checks.foo(5),而不是foo(5)

只是一个名称空间的东西,否则没有太大的区别。

编辑:如@mata所述,通常在大型项目中,import*会引起混淆,因为您不知道哪个模块{{1} }的来源,如果foo是您要导入的多个模块的成员,这将是一个更大的问题。因此,使用foo进行导入被认为是不好的做法。

答案 1 :(得分:1)

首先,了解from somewhere import something的含义,其中somewhere是指某个程序包所在的目录或程序包本身,而something是某个程序包或某个功能部件特定的包裹。

对于您来说,您要实现的目标是相对导入from .<module/package> import something指的是相对导入。您可以找到有关绝对和相对进口here的更多信息。

现在,进入您的原始问题。是的,有区别。

from .checks import *语句将导入checks.py文件中所有可用的类/函数。就是说,如果您的check.py文件包含名为foo的函数,那么在执行此import语句后,您将能够直接调用foo()

from . import checks语句将导入名为checks的模块。因此,执行该语句后,您将可以通过遵循<module>.<class/function>表示法来使用/调用任何类/函数。因此,为了使用foo()函数,必须使用语法checks.foo()

注意:在两种情况下,文件checks.py都应位于当前目录中。 .指的是相对路径,在这种情况下,指的是当前目录。