我对语法感到困惑:
import module.package
from module import package
from 是否引用了另一个文件夹,或者我应该将它用于同一文件中多个类中的一个类?
请您参考如下方法:
包是在最上层包含名为 __init__.py 的文件的任何目录。模块是任何具有 .py 扩展名的 Python 文件。
从这些定义中,您可能会发现模块不能包含包。恰恰相反;包包含模块。模块唯一可以包含的是绑定(bind)到 Python 对象(类、函数等)的名称
导入包时,只需执行__init__.py 文件即可。导入模块时,只需执行模块文件本身。当您使用 from package import module 或 import package.module 从包中导入模块时,您从包和模块文件本身。
要从模块中只导入一个类,必须使用 from X import Y 语句,其中 X 是 [package1.[subpackage2.]]modulename 和 Y 是绑定(bind)到您要导入到名称的对象的名称。请注意,即使您执行了这种导入,__init__.py 和整个模块脚本仍将被执行。唯一的区别是添加到您的 namespace 的内容,即 Y 指向的对象。
请注意,from X import Y 语句有点奇怪。因为如果 X 引用一个包,那么 Y 可以引用包中的一个模块。为了克服这种混淆,最好将包和模块视为命名空间。最大的区别是包是模块的命名空间,而模块是具体 Python 对象的命名空间。
值得注意的是,您可以使用逗号从一个命名空间导入多个名称:
from collections import OrderedDict, Counter
此外,您可以从命名空间导入所有 名称:
从 itertools 导入 *
但是,不推荐这样做,因为它会不必要地污染命名空间。对于 Python 标准库,它基本上没问题,因为你不太可能与 takewhile 之类的东西发生名称冲突,但如果你正在处理一个包含多个库的大型项目,最好保留你的命名空间尽可能干净以避免碰撞。
