我的项目中有一个名为checks.py的文件。 我想一次导入所有内容。
这两者之间是否有区别?还是只是另一种书写方式?
from .checks import *
from . import checks
答案 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都应位于当前目录中。 .
指的是相对路径,在这种情况下,指的是当前目录。