当前位置: 首页 > 面试题库 >

命名空间与常规包

后凯捷
2023-03-14
问题内容

命名空间Python程序包(no
__init__.py)和常规Python程序包(具有__init__.py)之间有什么区别,尤其__init__.py是对于常规程序包为空时?

我很好奇,因为最近我一直忘了自己制作__init__.py的包装,而且我从没发现任何问题。实际上,它们的行为似乎与常规软件包相同。

编辑:命名空间包仅受Python 3.3支持(请参阅PEP
420
),因此自然地,此问题仅适用于Python 3。


问题答案:

阅读Aaron和PEP420的链接,看来,除了常规包可能在其中包含各种初始化代码的明显区别之外,命名空间包与常规包之间的根本区别在于,命名空间包是一个虚拟包,其内容可以沿着Python的查找路径分布在各个地方。__init__.py

例如,给定

a/foo/bar.py
b/foo/baz.py

如果两个ba在Python的路径,你可以导入foo.barfoo.baz自由。

当然,这引出了一个问题,即如果__init__.py不需要,那么在其他所有条件都相等的情况下,制作常规包或名称空间包会更好,但是有点不合时宜。



 类似资料:
  • VS 我习惯了第二种方法,但第一种方法是等价的吗?

  • 尽管 JavaScript 支持一对花括号创建的代码段,但是并不支持块级作用域; 而仅仅支持 函数作用域。 function test() { // 一个作用域 for(var i = 0; i < 10; i++) { // 不是一个作用域 // count } console.log(i); // 10 } 注意: 如果不是在赋值语句中,而是在 ret

  • 关于术语的一点说明: 请务必注意一点,TypeScript 1.5里术语名已经发生了变化。 “内部模块”现在称做“命名空间”。 “外部模块”现在则简称为“模块”,这是为了与ECMAScript 2015里的术语保持一致,(也就是说 module X { 相当于现在推荐的写法 namespace X {)。 这篇文章描述了如何在TypeScript里使用命名空间(之前叫做“内部模块”)来组织你的代码

  • Let the word of Christ dwell in you richly in all wisdom; teaching and admonishing one another in psalms and hymns and spiritual songs, singing with grrace in your hearts tto the Lord. And whatsoever

  • 客户端有许多“命名空间”,通常是一些公开的可管理功能。命名空间对应 Elasticsearch 中各种可管理的 endpoint。下面是全部的命名空间: **命名空间** **功能** `indices()` 索引数据统计和显示索引信息 `nodes()` 节点数据统计和显示节点信息 `cluster()` 集群数据统计和显示集群信息 `snapshot()` 对集群和索引进行拍摄快照或恢复数据

  • 命名空间 由于 js 环境极少命名空间管理模块, namespace 相对陌生, 比如有这样的文件结构, src/ demo/ core.cljs 可以看到 core.cljs 的路径就是: src/demo/core.cljs 注意 JVM 环境有个 classpath 的环境变量, 用于判断怎样查找源码, classpath 对应多个路径, 也可能是 jar 包, 而 jar 包中