作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
假设你有以下内容
b
b/__init__.py
b/c
b/c/__init__.py
b/c/d
b/c/d/__init__.py
在一些python包中,如果你import b
,你只会得到b中定义的符号。要访问 b.c,您必须显式地 import b.c
或 from b import c
。换句话说,你必须
import b
import b.c
import b.c.d
print b.c.d
在其他情况下,我看到了所有子包的自动导入。这意味着下面的代码不会产生错误
import b
print b.c.d
因为 b/__init__.py
负责导入它的子包。我倾向于第一个(显式比隐式好),而且我一直使用它,但是在某些情况下第二个比第一个更受欢迎吗?
最佳答案
我喜欢命名空间——所以我认为 import b
应该只获取 b
本身的内容(大概在 b/__init__.py
).如果有理由在 b.c
、b.c.d
或其他任何地方隔离其他功能,那么 import b
不应将其全部拖入 - 如果“全部拖入”确实发生了,我认为这表明 namespace 分离可能是一开始的虚假分离。当然,标准库里也有例子(import os
,然后可以使用os.path.join
之类的),不过比较古老,by现在基本上是在 Python 打包系统成熟和稳定之前“祖父”的东西。在新代码中,我强烈建议一个包在导入时不要将其子包拖到一起。 (在 Python 提示符下执行 import this
并考虑它显示的最后一行;-)。
关于python - 是否自导入分包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1824001/
系统详细信息: Arch Linux:4.11.7-1-ARCH x64 Oracle Java JDK:1.8.0_131 IntelliJ Scala 插件:2017.1.19(最新) SBT:0
我是一名优秀的程序员,十分优秀!