每当我做from 'x' import 'y'时,我都想知道哪个模块被认为是“模块”,哪个模块被认为是“包装”,为什么它不是相反的?

评论

关于为什么不是这样,请参见stackoverflow.com/questions/3600352/…

我对此表示感谢,因为答案很简洁,并提供了确切的必要知识。该文档很好用,但花哨的且包含的信息远远超出了OP的要求,而且肯定比我需要的更多。我只是想要一个特定问题的答案,下面的答案正是我想要的。我们许多人只是不需要这种正式或深入的答案。

要了解的相关概念-Python中的类与模块

#1 楼

Python模块只是一个Python源文件,可以公开类,函数和全局变量。

从另一个Python源文件导入时,该文件名被视为命名空间。

Python包仅仅是Python模块的目录。例如,想象一下/usr/lib/python/site-packages中的以下目录树:

mypackage/__init__.py <-- this is what tells Python to treat this directory as a package
mypackage/mymodule.py


那么您就可以这样做:

import mypackage.mymodule


from mypackage.mymodule import myclass


评论


啊哈,所以当您说文件名被当作一个名称空间时,您会这样吗?第一种情况是“ mymodule.var1”,第二种情况是“ myclass.var1”?

–黑暗圣堂武士
2011年10月2日4:08



不完全是。程序包仍然算作名称空间的一部分。如果您想按照您说的去做,则需要从mypackage导入mymodule。

–任马可维奇
2011年10月2日,晚上10:42

添加一些有关名称空间包的信息可能很有用,因为它们的代码不必全部都出现在同一目录树中。

– holdenweb
17年4月19日在16:59

@holdenweb从未直接使用那里涉及的不同机制,所以不是专家。如果您在新答案中提供了有关它的详细说明,我会从我的网站中引用它。

–任马可维奇
17年4月22日在4:18

回想起来,可能有点太神秘了而不值得

– holdenweb
17年4月22日在16:08