Python 3.3 具有隐式命名空间包 (PEP420),在 Python 2.7 中,可以通过在 __init__py 中添加两行来将包标记为命名空间包。请参阅如何在 python 中创建命名空间包。
鉴于包启用的功能,看起来新包应该默认创建为命名空间包。
普通的 python 包应该只在明显需要“封闭”包的特殊情况下使用。
这种方法有什么缺点?
Python 3.3 具有隐式命名空间包 (PEP420),在 Python 2.7 中,可以通过在 __init__py 中添加两行来将包标记为命名空间包。请参阅如何在 python 中创建命名空间包。
鉴于包启用的功能,看起来新包应该默认创建为命名空间包。
普通的 python 包应该只在明显需要“封闭”包的特殊情况下使用。
这种方法有什么缺点?
PEP 420说明常规包具有性能优势:
无意删除对常规软件包的支持。如果开发人员知道她的包永远不会成为命名空间包的一部分,那么将其作为常规包(带有
__init__.py
)具有性能优势。当常规包位于路径上时,可以立即创建和加载常规包。对于命名空间包,必须在创建包之前扫描路径中的所有条目。