完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1. 使用 __all__ 控制可被导入的变量使用 from module import * 默认情况下会导入 module 里的所有变量,若你只想从模块中导入其中几个变量,可以在 module 中使用 __all__ 来控制想要被其他模块导入的变量。
打开 python console 验证一下
__all__ 仅对于使用from module import * 这种情况适用。 它经常在一个包的 __init__.py 中出现。 2. 命名空间包的神奇之处命名空间包,一个陌生的名字。 与我们熟悉的常规包不同的是,它没有 __init__.py 文件。 更为特殊的是,它可以跨空间地将两个不相邻的子包,合并成一个虚拟机的包,我们将其称之为 命名空间包。 例如,一个项目的部分代码布局如下
在这2个目录里,都有着共同的命名空间spam。在任何一个目录里都没有__init__.py文件。 让我们看看,如果将foo-package和bar-package都加到python模块路径并尝试导入会发生什么?
当一个包为命名空间包时,他就不再和常规包一样具有 __file_ 属性,取而代之的是 __path__
3. 模块重载中的一个坑由于有 sys.modules 的存在,当你导入一个已导入的模块时,实际上是没有效果的。 为了达到模块的重载,有的人会将已导入的包从 sys.modules 中移除后再导入 就像下面这样子
上面的例子里我使用的是import foo.bar ,如果你使用的是 from foo import bar 这种导入形式,会发现重载是同样是无效的。 这应该算是一个小坑,不知道的人,会掉入坑中爬不出来。
因此,在生产环境中可能需要避免重新加载模块。而在调试模式中,它会提供一定的便利,但你要知道这个重载的弊端,以免掉入坑里。 |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 10:26 , Processed in 0.719029 second(s), Total 37, Slave 30 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号